0
我有一個Spring/JPA/Hibernate應用程序,並且有一段代碼被石英作業每分鐘調用一次以發送一些通知。春季休眠不更新實體
@Transactional
public void sendNotifications(){
Set<MyEntity> entitySet = getDAO().findEntitiesToNotify();
for (MyEntity e : entitySet) {
sendEntityNotificationEmail(e);
e.setNotification(true);
this.merge(e);
}
return false;
}
這在大部分時間都可以正常工作。關鍵短語是「大部分時間」,因爲有時這個事務不會更新數據庫,所以每分鐘都會發送通知電子郵件,直到我手動執行並終止石英作業或更新數據庫爲止。日誌中沒有錯誤,數據庫也沒有更新。有沒有人對這個問題有什麼想法?或者我可以調試這個問題的任何方式。是否有一些競爭條件發生,因爲這種方法每隔一分鐘就調用一次,所以一個新線程再次調用同一個任務,而另一個正在處理它,因此這個改變不會持久?
如何void方法返回布爾?似乎你在發佈問題時忘記了一些細節。 – 2012-02-15 08:20:36
爲什麼合併而不保存更新? – Firo 2012-02-15 11:05:50
爲什麼合併而不是持續?最終會使用「flush()」,寫更多的代碼 – darek 2012-02-15 13:51:13