2012-08-28 159 views
1

我有一個JPA EntityListener以下方法:使用JPA實體監聽堅持JPA實體

@PostPersist 
    void onPostPersist(Pli pli) { 
     EvenementPli event = new EvenementPli(); 
     event.setPli(pli); 
     event.setDateCreation(new Date()); 
     event.setDateEvenement(new Date()); 
     event.setType(TypeEvenement.creation); 
     event.setMessage("Création d'un pli"); 
     event.persist(); 
    } 

基本上,我試圖通過每次持續的EvenementPli實例的Pli的實例,以創建活動實體被堅持。

麻煩的是,通過時間event.persist();被稱爲PLI行不是在導致MySQL抱怨約束數據庫...

任何人都可以請幫助?

回答

3

適當的解決方案是重新設計應用程序,使EvenementPli發生在其他實體的@PostPersist回調方法以外的地方。根據JPA 2.0說明書中這樣的一個操作不保證在生命週期回調方法工作:

一般而言,便攜式應用程序不應 調用的EntityManager或查詢操作的生命週期方法中,訪問其他實體 情況下,或修改關係在相同的持續性 上下文中。

+0

謝謝Mikko。我不知道規範的這個方面。我將不得不回到aspectJ ...... – balteo