HibernateTemplate和Spring @Transactional如何协同工作?

时间:2014-03-12 17:29:42

标签: java spring hibernate spring-transactions

我们在DAO中使用HibernateTemplate进行所有CRUD操作。

我的问题是,我们在服务上使用spring @Transactional,因为spring正在管理事务, HibernateTemplate 在更新多个DAO的senario中如何表现。当使用Spring @Transactional时, HibernateTemplate 在不同的DAO中使用相同的会话是什么意思?

@Transactional
public boolean testService(SObject test)[

     dao1.save(test.getOne());
     dao2.save(test.gettwo());

}


这就是DAO类的外观:

public class GenericHibernateDao<T, PK extends Serializable> extends HibernateDaoSupport
.
.
.
public PK save(T newInstance) {
    return (PK) getHibernateTemplate().save(newInstance);
}

1 个答案:

答案 0 :(得分:2)

HibernateTransactionManager javadoc对此很清楚:

  

此事务管理器适用于使用单个Hibernate SessionFactory进行事务数据访问的应用程序,但它也支持事务中的直接DataSource访问(即使用相同DataSource的纯JDBC代码)。这允许混合访问Hibernate的服务和使用普通JDBC的服务(不知道Hibernate)!应用程序代码需要遵循与org.springframework.jdbc.datasource.DataSourceTransactionManager相同的简单连接查找模式(即DataSourceUtils.getConnection或通过TransactionAwareDataSourceProxy)。

只要您通过知道连接代理的帮助程序类访问连接,例如DataSourceUtils(并且JdbcTemplate使用引擎盖后面的那些),您就可以了。