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