春季休眠不更新实体
问题描述:
我有一个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