2013-09-24 49 views
0

我有模型類preUpdate()方法,該方法使用@PreUpdate進行註釋。 此方法調用我的方法deleteCache()@PreUpdate在選擇時觸發

public void deleteCache() { 
    final List<Model> models = Model.findAll(); 
    for (final Model model : models) { 
     Cache.remove(model.id); 
    } 
} 

Model.findAll()實現:

public static List<Model> findAll() { 
    Query query = JPA.em().createQuery("SELECT o FROM Model o"); 
    return query.getResultList(); 
} 

當我觸發Model.save()我更新前的方法被調用,它調用deleteCache,但達到return query.getResultList()時preUpdate方法被再次調用,所以我得到了StackoverflowException。

任何人都可以向我解釋爲什麼preUpdate方法被稱爲即使沒有改變模型?代碼有問題嗎?謝謝。

編輯: 我讀this後,所以em.flush()被調用。但是沒有UPDATE,INSERT調用。

+0

你解決了嗎? – kevcodez

回答

1

我建議不要在JPA偵聽器回調中與JPA交互。根據我的經驗,這是一條有許多令人討厭和意外的行爲(以及大量的調試時間)的道路。