我们在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);
}
答案 0 :(得分:2)
HibernateTransactionManager
javadoc对此很清楚:
此事务管理器适用于使用单个Hibernate SessionFactory进行事务数据访问的应用程序,但它也支持事务中的直接DataSource访问(即使用相同DataSource的纯JDBC代码)。这允许混合访问Hibernate的服务和使用普通JDBC的服务(不知道Hibernate)!应用程序代码需要遵循与org.springframework.jdbc.datasource.DataSourceTransactionManager相同的简单连接查找模式(即DataSourceUtils.getConnection或通过TransactionAwareDataSourceProxy)。
只要您通过知道连接代理的帮助程序类访问连接,例如DataSourceUtils
(并且JdbcTemplate
使用引擎盖后面的那些),您就可以了。