2012-02-15 45 views

回答

6

您不需要爲此添加攔截器,只需使用JPA的callback methods和/或entity listeners即可。

用第一種方法,您添加到這些註釋的一個聲明的實體的方法:@PrePersist@PostPersist,​​,@PostUpdate@PreRemove@PostRemove,或@PostLoad。名稱不言自明,意味着對於每個事件(預留持久性,後持久性等),註釋的方法被調用。

第二種方法是類似的,但這些方法是在一個或多個單獨的類中實現的,而這些類又被添加到使用@EntityListeners註釋的實體中。

第二種方法更靈活,但無論哪種方式,你可以用鼠標右鍵之前攔截持久性操作/發生後,他們和執行所需的操作。

+0

我知道,但舉例來說,如果我需要審計一個@PreUpdate,執行這個回調方法時,似乎JPA已經附上了我的實體更新。事實上,審計我需要我的實體的最後值。 – joaosavio 2012-02-15 13:58:15

+2

一個'@ PreUpdate'保證在某一時刻_before_數據庫更新被調用。爲了存儲以前的值,在'@ PostLoad'中保存當前值到同一個實體的另一個屬性中; 「舊」值(S)將在那裏@ PreUpdate'執行時',和「新」的價值觀會在實體在該點這樣的屬性。 – 2012-02-15 14:17:54

+0

但是在@PreUpdate方法中,我怎麼能得到舊的值? – joaosavio 2012-02-15 15:10:31