Hibernate 事务方法中的显式flush()是否会更新数据库

Hibernate 事务方法中的显式flush()是否会更新数据库,hibernate,Hibernate,在我的应用程序中,我有一个服务层,其中为该服务中的所有方法声明了spring事务边界。服务层内部联系dao。这里我的问题是,如果在dao方法中指定getHibernateTemplate.flush(),它将立即更新db,还是直到服务层方法完成,它才会提交更改。请帮帮我 class someservice{ public void somemethod(){ activitydao.save(domainobj); } } class ActivityDAO extends

在我的应用程序中,我有一个服务层,其中为该服务中的所有方法声明了spring事务边界。服务层内部联系dao。这里我的问题是,如果在dao方法中指定getHibernateTemplate.flush(),它将立即更新db,还是直到服务层方法完成,它才会提交更改。请帮帮我

class someservice{
   public void somemethod(){
     activitydao.save(domainobj);
   }
}
class ActivityDAO extends HibernateDaoSupport{
public void save(domainobj){
  getHibernateTemplate().save(domainobj);
  getHibernateTemplate().flush(); ----> will it update db immediately ?
}
}
谢谢, Ramki.

flush()
将对该hibernate会话管理的所有持久实体执行脏检查。如果持久实体是脏的,hibernate将立即向DB发出更新SQL

但是,仅仅发出更新SQL并不意味着数据实际上保存到了DB,您必须提交事务才能确认将数据实际保存到DB。因此,
flush()


当您使用Spring管理事务时,如果您的方法成功返回,事务将自动提交。如果在方法返回之前抛出任何异常,事务将自动回滚。

感谢您的快速回答。我会详细解释我的问题。谢谢你的快速回答。我会详细解释我的问题。我有以下类1)jms侦听器,它将侦听队列。2) ThreadPoolDeligator,将包含大约10个线程。3) RequestExecutor(是一个可运行类),它通过获取servicelayer对象4)服务类5)dao类来获取流程请求。当jms收到一条消息时,它将发送给threadpool executor,threadpool executor将在内部调用RequestExecutor(3)来执行该消息,它将在内部使用service method进行处理。servcie method将在内部对db进行一些更改,send将向其他系统拾取的队列发送一条消息,并对其进行处理,然后再次将请求发送到我的系统。此请求将由另一个线程执行。这两个线程之间存在一定的时间间隔(可能是几毫秒)。但在这里我可以看到db的变化。但是thread2看不到这些问题。您应该将此问题作为另一个新问题发布,让更多人知道。此外,使用更多相关标记标记问题可以让更多人对您标记的标记感兴趣,从而找到您的问题