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>

               但是這種方式有個局限性,如果該方法中既有調用Hibernate進行存儲,也有通過JdbcTemplate進行數據庫的寫操作,如果在方法執行過程中,寫數據發生異常時,只有納入了事務管理的通過Hibernate進行存儲的數據才會回滾,而通過JdbcTemplate方式進行操作的數據不會進行回滾。

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

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

               JdbcTemplate和Hibernate能被wrap到同一個事務里。成立需要幾點條件:
               1、使用同一個datasource;
               2、事務交由HibernateTransactionManager管理;
               3、相關dao以及service需要使用runtime exception體系,使用spring提供的exception可以,自己封裝設計的runtime exception體系也行。

          posted on 2009-09-18 23:51 張平輝 閱讀(1014) 評論(0)  編輯  收藏 所屬分類: JAVA

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          留言簿

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 福州市| 镇平县| 芒康县| 惠安县| 扎鲁特旗| 青河县| 宝清县| 宜宾县| 盐山县| 晋宁县| 师宗县| 策勒县| 乌什县| 泾源县| 兴义市| 名山县| 嘉鱼县| 崇明县| 忻州市| 千阳县| 浦县| 白城市| 志丹县| 贵港市| 库伦旗| 台湾省| 博白县| 云和县| 黎平县| 密山市| 资源县| 天台县| 会东县| 塔城市| 陈巴尔虎旗| 广州市| 大方县| 沙湾县| 普安县| 玛多县| 盈江县|