Hibernate與JdbcTemplate共享事務管理

               在Spring和Hibernate的配置文件中,我們可以對類中的方法進行事務控制,也就是說某個方法中含有多個數(shù)據(jù)庫的寫操作,我們可以通過創(chuàng)建一個Spring中的HibernateTransactionManager實例,把相應的sessionFactory注入到其的sessionFactory屬性中,由事務聲明的方式進行事務控制。樣例如下:

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

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

               原因是Hibernate與JdbcTemplate使用的是不同DBConnection,而且JdbcTemplate未申明相應的事務管理,所以要想在既使用了Hibernate,也使用了JdbcTemplate進行數(shù)據(jù)庫存儲操作的方法進行事務管理,需要在Spring的配置文件做適當?shù)男薷模瑯永缦拢?nbsp;

               <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、相關(guān)dao以及service需要使用runtime exception體系,使用spring提供的exception可以,自己封裝設計的runtime exception體系也行。

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

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

          導航

          統(tǒng)計

          留言簿

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 巴南区| 饶平县| 三门峡市| 汨罗市| 汝南县| 靖宇县| 修水县| 洞口县| 抚宁县| 勃利县| 平果县| 杂多县| 曲水县| 宽城| 潞西市| 融水| 乐山市| 安陆市| 河南省| 新邵县| 政和县| 融水| 罗平县| 临邑县| 鄂伦春自治旗| 镇远县| 寿宁县| 布拖县| 故城县| 平舆县| 平利县| 永泰县| 阿拉尔市| 汤阴县| 聂荣县| 横山县| 西乌珠穆沁旗| 迁安市| 潍坊市| 舟山市| 沂源县|