Spring休眠不更新实体

时间:2012-02-15 05:52:30

标签: hibernate spring jpa quartz-scheduler

我有一个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;
 }

大部分时间都可以正常使用。关键短语是“大部分时间”,因为有时,此事务不会更新数据库,因此通知电子邮件每分钟发送一次,直到我手动去杀死石英作业或更新数据库。日志中没有错误,数据库也没有更新。有谁知道这个问题是什么?或者我可以通过任何方式调试此问题。是否存在一些竞争条件,因为此方法每隔一分钟被调用一次,因此新线程再次调用同一任务而另一个正在处理它,因此更改不会持久存在?

1 个答案:

答案 0 :(得分:0)

最好在其他线程中发送通知,而不是再次从数据库获取实体,更新实体状态并保存