2010-09-30 30 views
2

我在我的系統中三個實體 - 其中之一時,在其他兩個領域的改變必須進行更新:使用Hibernate/JPA事件監聽器來更新一個實體,當其他實體更新

@Entity 
public class Order { 
    private String name; 
    private Integer quantity; 
    private String status; 
} 

@Entity 
public class OrderLocation { 
    private String status; 
    private String desc; 
} 

@Entity 
public class OrderKey { 
    private String generatedKey; 
} 

所以後Order或OrderLocation上的任何字段都會更改,我必須重新生成密鑰(在代碼中),然後將其保存回OrderKey。

我一直在尋找EntityListeners來做到這一點,但不確定是否使用JPA或Hibernate版本。我想在理想情況下使用註釋。

任何指導將非常感謝 - 提前感謝。

回答

0

我真的不贊成這樣的解決方案。在我工作的項目中,我們使用專門的處理程序來完成所有處理。處理程序必須知道哪些實體必須在發生更改時進行更新。例如。使用處理數據庫更新的抽象層。如果Order或OrderLocation發生更改,則它會處理OrderKey的更新。

如果你使用監聽器,你也可能有一些循環問題。所以我建議在實體中使用處理程序而不是使用管理員。

但是如果你想使用這種機制,你可以嘗試@PrePersist和@PreUpdate來調用一個能夠處理實體變化的方法。

+0

嗨羅伯特 - 你能否提供你的解決方案創建一個處理程序,它可以獨立於JPA而且仍然可以聽取事件?我的用例是 - 有兩個實體彼此具有postPersist事件依賴關係,這可能會導致循環依賴。我們使用Eclipselink作爲JPA供應商,所以我們可以選擇使用描述符事件及其變更集。但我更喜歡更接近實體類的邏輯,而不是全局持久性事件層。 – tipsytopsy 2016-03-08 16:23:39