2010-03-26 65 views
3

在一個持久對象中,如果我只改變一個字段,是否有可能通過Hibernate找出已改變的字段? 我知道我可以得到整個舊行和新行並進行比較。有沒有辦法只使用Hibernate從對象中獲取已更改的列?

+0

您想在哪一點更改行?保存之後,保存之後,過一會兒? – Bozho 2010-03-26 07:01:54

+0

@Bozho保存之前,我可以記錄哪一列更新。 – 2010-03-26 07:31:17

回答

5

一個選項是掛鉤Hibernate的事件系統(請參閱docs)。例如,如果您註冊接收FlushEntityEvent,則會通過getDirtyProperties方法通知您哪些列正在更改。

7

根據您的評論之一,我的理解是您正在尋找一個審計解決方案,所以我建議您檢查Envers,這正是關於這一點的。

Envers項目旨在實現持久化類的簡單審覈/版本控制。你所要做的就是用@Audited註釋你想要審計的持久類或它的一些屬性。對於每個審計實體,將創建一個表格,該表格將保存對實體所做更改的歷史記錄。然後您可以毫不費力地檢索和查詢歷史數據。

+0

是的,我正在尋找一個審計解決方案。但是,envers告訴天氣審計領域已經改變或沒有改變,而不是哪個領域改變。還需要單獨的表來存儲審計數據。 – 2010-03-30 06:26:42

相關問題