Hibernate與JdbcTemplate共享事務管理

 在Spring和Hibernate的配置文件中,咱們能夠對類中的方法進行事務控制,也就是說某個方法中含有多個數據庫的寫操做,咱們能夠經過建立一個Spring中的HibernateTransactionManager實例,把相應的sessionFactory注入到其的sessionFactory屬性中,由事務聲明的方式進行事務控制。樣例以下:

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

     可是這種方式有個侷限性,若是該方法中既有調用Hibernate進行存儲,也有經過JdbcTemplate進行數據庫的寫操做,若是在方法執行過程當中,寫數據發生異常時,只有歸入了事務管理的經過Hibernate進行存儲的數據纔會回滾,而經過JdbcTemplate方式進行操做的數據不會進行回滾。數據庫

     緣由是Hibernate與JdbcTemplate使用的是不一樣DBConnection,並且JdbcTemplate未申明相應的事務管理,因此要想在既使用了Hibernate,也使用了JdbcTemplate進行數據庫存儲操做的方法進行事務管理,須要在Spring的配置文件作適當的修改,樣例以下: session

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

     JdbcTemplate和Hibernate能被wrap到同一個事務裏。成立須要幾點條件:
     一、使用同一個datasource;
     二、事務交由HibernateTransactionManager管理;
     三、相關dao以及service須要使用runtime exception體系,使用spring提供的exception能夠,本身封裝設計的runtime exception體系也行。 設計

相關文章
相關標籤/搜索