Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在getHibernateTemplate()的情况下发生提交时_Spring_Hibernate - Fatal编程技术网

Spring 在getHibernateTemplate()的情况下发生提交时

Spring 在getHibernateTemplate()的情况下发生提交时,spring,hibernate,Spring,Hibernate,我在我的应用程序中使用Spring Hibernate集成,DAO类正在扩展HibernateDaoSupport。 假设我使用代码getHibernateTemplate().save(object) 使用hibernate模板,我不需要显式提交事务。我想知道在什么时候提交数据 考虑下面的代码片段 public void saveObject(){ ....... getHibernateTemplate().save(object1); .... .... ge

我在我的应用程序中使用Spring Hibernate集成,DAO类正在扩展
HibernateDaoSupport
。 假设我使用代码
getHibernateTemplate().save(object)
使用hibernate模板,我不需要显式提交事务。我想知道在什么时候提交数据

考虑下面的代码片段

public void saveObject(){
   .......
   getHibernateTemplate().save(object1);
   ....
   ....
   getHibernateTemplate().save(object2);
 }

在上面的代码中,在
getHibernateTemplate()之后,
object1
将被插入数据库的确切位置。save(object1)或在方法末尾?

它取决于事务管理器配置和/或刷新模式设置。

您应该使用以下方法:

@覆盖
公共作废账户(账户){
hibernateTemplate.getSessionFactory().getCurrentSession().beginTransaction();
hibernateTemplate.saveOrUpdate(帐户);
hibernateTemplate.getSessionFactory().getCurrentSession().getTransaction().commit();
}
两个都不是

在默认配置中,
insert
语句是在它们可以执行的最后一刻执行的,我的意思是hibernate将它们保留到事务结束,或者它应该保留的任何其他点(如果有
flush
命令,一些其他select命令……)


但提交根本不依赖于此,提交仅在您(或Spring!)提交事务时发生。所以这取决于您如何管理事务,如果您使用Spring的声明性事务管理,那么哪个方法具有事务属性很重要,以及它的属性。

假设我没有在项目中配置任何事务管理,即依赖hibernate模板提供的默认事务,也没有使用任何刷新模式。在这种情况下,在什么时候提交?默认为自动刷新。您可以通过调用例如sessions=sessionFactory.openSession()来检查刷新模式;System.out.println(“我的刷新模式”+s.getFlushMode());