1. 程式人生 > >Hibernate與JDBC事物的混用

Hibernate與JDBC事物的混用

最近摸索了一下Hibernate與JDBC(iBATIS)事務整合問題,算是有點收穫,寫出來和大家討論一下吧。。。

一般大家都會使用Spring宣告型事務 transactionAttributes 為 PROPAGATION_REQUIRED

Hibernate 使用 HibernateTransactionManager 、JDBC(iBATIS) 使用DataSourceTransactionManager

當需要將它們整合到一個事務中的時候

普通的做法是配置統一的DataSource, Hibernate與JDBC(iBATIS) 都使用HibernateTransactionManager

------------------------------------------------------

Hibernate與JDBC(iBATIS) 都使用DataSourceTransactionManager又可不可以呢?

普遍的看法是 NO! 認為DataSourceTransactionManager根本就不處理Hibernate的session,事務當然無法實現。。。

但事實是否真的如此呢?

Juergen Hoeller:
Just if you proxy your JDBC DataSource with a TransactionAwareDataSourceProxy (available since Spring 1.1 RC1) and pass that proxy to your LocalSessionFactoryBean, you could use DataSourceTransactionManager in combination with Hibernate.

也就是說配置 sessionFactory  的 useTransactionAwareDataSource 為 true

Hibernate與JDBC(iBATIS)  都使用 DataSourceTransactionManager 同樣可以保證事務

原理就是保證了 connection 的唯一性。