Java HibernateTemplate和Spring@Transactional如何协同工作?
对于所有CRUD操作,我们在DAO中使用HibernateTemplate 我的问题是,我们在服务上使用springJava HibernateTemplate和Spring@Transactional如何协同工作?,java,spring,hibernate,spring-transactions,Java,Spring,Hibernate,Spring Transactions,对于所有CRUD操作,我们在DAO中使用HibernateTemplate 我的问题是,我们在服务上使用spring@Transactional,因为spring管理事务,所以HibernateTemplate在我更新多个DAO的senario中的行为如何。这意味着当使用Spring@Transactional时,HibernateTemplate会在不同的DAO之间使用相同的会话吗 @Transactional public boolean testService(SObject test)[
@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);
}
公共类generichBernateDao扩展了HibernateDaoSupport
.
.
.
公共主键保存(T newInstance){
返回(PK)getHibernateTemplate().save(newInstance);
}
HibernateTransactionManager非常清楚这一点:
此事务管理器适用于使用单个Hibernate SessionFactory进行事务数据访问的应用程序,但它也支持事务内的直接数据源访问(即使用相同数据源的普通JDBC代码)。这允许混合访问Hibernate的服务和使用普通JDBC的服务(不知道Hibernate)!应用程序代码需要遵循与org.springframework.jdbc.datasource.DataSourceTransactionManager相同的简单连接查找模式(即DataSourceUtils.getConnection或通过TransactionAwareDataSourceProxy)
只要您通过知道连接代理的助手类(如DataSourceUtils
)访问连接,就可以了(而JdbcTemplate
在后台使用该代理)