日期:2014-05-16  浏览次数:20487 次

JDBCTemplate和HibernateTemplate事物源码解析

由于项目中对批量的sql进行入库处理。所以打算用jdbcTemplate。在其他的增删改查中都是用hibernateTemplate

在这里考虑到一个问题,就是当jdbcTemplatehibernateTemplate结合用的时候,事物是怎么样的了?

经过测试:在一个方法中同时使用jdbcTemplate,和hibernateTemplate对数据进行增加操作。然后抛出异常。

发现事物是可以正常回滚的。但为什么可以这样了?看了下源码终于了解了一些。

<bean id="oaTM" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref bean="oaSessionFactory"/></property>
</bean>

总而言之。不管是使用jdbcTemplate或者是hibernateTemplate都是对jdbc的封装,说白了,对数据库的操作还是

使用connection,在回滚事物的时候还是调用了connection. Rollback方法来进行回滚的。

这一回想,在hibernate中有个sessionFactory. getCurrentSession()方法。调用的当前的线程session

意思就是用当前的connection来操作数据。

spring管理中有这么一个类来进行当前线程的数据绑定:TransactionSynchronizationManager

public abstract class