2011-12-16 38 views
4

我試圖檢測實體中的更改,以便檢測對實體所做的更改,以便我可以日誌對任何用戶所做的更改。如何訪問以前的實體狀態?

現在我已成功地使用:

@EntityListeners(AuditListener.class) 
@Entity 
public class Entity1{...} 

,並

public class AuditListener { 
@PostPersist 
@PostUpdate 
public void setUserInformation(Object entity) {...} 
} 

現在,我想有一種方法可以讀取實體的以前的狀態所以我可以將它與當前值進行比較,並將審覈表寫入字段,新值和執行修改的用戶。

我知道我可以使用@PostLoad並保存在內存中的以前的狀態,但我認爲必須有一個更通用的方式來完成相同的(硬編碼較少)。

在此先感謝。

+0

Hello @MДΓΓБДLL,因爲`@ PrePersist/@ PreUpdate`是在Persist/Update發生之前執行的,我需要一個Initial State(與第一次加載時相同的數據)。我已經在某處讀到** PersistenceContext **保存每個實體的初始狀態以防需要執行回滾,但仍未找到實現來訪問該狀態。 – 2011-12-16 03:43:30

回答

0

Roolback不會將實體返回到其預先更新/預先保留的狀態,它將恢復對數據庫的任何更改。我認爲在持久性contex中沒有這樣的對象。我認爲您應該使用aspect。