在getHibernateTemplate()的情况下提交时

时间:2012-08-24 18:29:17

标签: spring hibernate

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

考虑以下代码段

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

在上面的代码中,确切地将object1插入到DB {after getHibernateTemplate().save(object1);或方法结尾处?

3 个答案:

答案 0 :(得分:0)

这取决于事务管理器配置和/或刷新模式设置。 http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/FlushMode.html

答案 1 :(得分:0)

你应该用这个:

  @Override
    public void addAccount(Account account) {

        hibernateTemplate.getSessionFactory().getCurrentSession().beginTransaction();
        hibernateTemplate.saveOrUpdate(account);
        hibernateTemplate.getSessionFactory().getCurrentSession().getTransaction().commit();
    }

答案 2 :(得分:0)

都不是。

在默认配置中,insert语句在最后时刻执行,我的意思是hibernate将它们保持到事务结束,或任何其他点(如果有flush命令,其他一些选择命令....)。

但是提交完全不依赖于此,只有在您(或Spring!)提交事务时才会提交。所以它取决于你如何管理事务,如果你使用Spring的声明式事务管理,那么哪个方法具有事务属性以及它所具有的属性是很重要的。