2014-03-12 29 views
1

我們在我們的DAO中使用HibernateTemplate進行所有CRUD操作。HibernateTemplate和Spring @Transactional是如何協同工作的?

我的問題是,我們使用的服務彈簧@Transactional,因爲彈簧管理事務,請問在我更新多個DAO的塞納里奧的的HibernateTemplate的行爲。含義HibernateTemplate在使用Spring @Transactional時跨越不同的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); 
} 

回答

2

HibernateTransactionManagerjavadoc是這個相當清楚的:

該事務管理器是適用於使用一個單一的應用程序Hibernate SessionFactory用於事務性數據訪問,但它也支持事務內的直接數據源訪問(即p lain JDBC代碼使用相同的DataSource)。這允許混合使用Hibernate的服務和使用普通JDBC的服務(不需要知道Hibernate)!應用程序代碼需要遵循與org.springframework.jdbc.datasource.DataSourceTransactionManager(即DataSourceUtils.getConnection或經歷TransactionAwareDataSourceProxy)相同的簡單Connection查找模式。

您只要您訪問通過了解連接代理的輔助類的連接是細如DataSourceUtils(和JdbcTemplate使用了後面的引擎蓋)