发布网友 发布时间:2022-04-08 01:38
共2个回答
懂视网 时间:2022-04-08 05:59
一般大家都会使用Spring声明型事务 transactionAttributes 为 PROPAGATION_REQUIRED
Hibernate 使用 HibernateTransactionManager 、JDBC(iBATIS) 使用 DataSourceTransactionManager
当需要将它们整合到一个事务中的时候
普通的做法是配置统一的DataSource, Hibernate与JDBC(iBATIS) 都使用HibernateTransactionManager
坛子里有篇帖子已经详细论述了这种整合方案 http://www.iteye.com/topic/11063?page=2
------------------------------------------------------
Hibernate与JDBC(iBATIS) 都使用DataSourceTransactionManager又可不可以呢?
普遍的看法是 NO! 认为DataSourceTransactionManager根本就不处理Hibernate的session,事务当然无法实现。。。
但事实是否真的如此呢?
答案同样是 NO! http://forum.springframework.org/archive/index.php/t-9878.html
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 的唯一性。
Hibernate与JDBC事务整合
标签:
热心网友 时间:2022-04-08 03:07
Hibernate的底层还是jdbc,只不过额外封装了很多东西而已。。例如事务,SessionFacotory等等..给你举个例子,你需要买一瓶酱油。你直接跑到酱油工厂里去拿了一瓶,因为你需要酱油,所以你去拿。而Hibernate的作用就是超市,你需要酱油的时候直接去超市里买,而不是直接去工厂..超市的将有卖完了,它自己就去工厂里进货,至于如何进货,你完全不用关心,只需要配置好各种配置文件就ok。 我知道你又会有疑问了。。当超市的货物不能满足你的时候,就比如说你需要一架飞机,当时超市没有卖。这个时候Hibernate也提供了hql和sql,让你直接去工厂里提货。。 超市里还有包换,这个就是事务了。。你需要买一瓶酱油一瓶醋,你总不能买瓶酱油回家 然后再来超市买醋吧。。事实上你是买了酱油然后再买瓶醋然后一起回家。;这个就类似与Hibernate的transaction了。。 亲,你学到了没。。哥打了这么久的字。。追问问的是事务的区别