細(xì)心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學(xué)業(yè),五六點(diǎn)粗墨,七八筆買賣,九十道人情。

          BlogJava 聯(lián)系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

          Hibernate事務(wù)管理
            Hibernate是JDBC的輕量級(jí)封裝,本身并不具備事務(wù)管理能力,在事務(wù)管理層,Hibernate將其委托給底層的JDBC或者JTA,以實(shí)現(xiàn)事務(wù)的管理和調(diào)度。

            Hibernate的默認(rèn)事務(wù)處理機(jī)制基于JDBCTransaction,也可以通過配置文件設(shè)定采用JTA作為事務(wù)管理實(shí)現(xiàn):

             <hibernate-configuration>

                  <session-factory>

              ……

                       <property name = "hibernate.transaction.factory_class">

               net.sf.hibernate.transaction.JTATransactionFactory

              </session-factory>

             </hibernate-configuration>

          1、基于JDBC的事務(wù)管理

            Hibernate對(duì)于JDBC事務(wù)的封裝非常簡(jiǎn)單。例如:

             session=sessionFactory.openSession();

             Transaction tx= session.beginTransaction();

             ……

             tx.commit();

          這里要注意的是,在sessionFactory.openSession()中,Hibernate會(huì)初始化數(shù)據(jù)庫連接,與此同時(shí),將其 AutoCommit設(shè)為關(guān)閉狀態(tài),這就是說,從SessionFactory獲得session,其自動(dòng)提交屬性就已經(jīng)被關(guān)閉了,下面的代碼不會(huì)對(duì)事務(wù)性數(shù)據(jù)庫產(chǎn)生任何效果。

             session=sessionFactory.openSession();

             session.save(user);

             session.close();

          如果要使得代碼真正作用到數(shù)據(jù)庫,必須顯示的調(diào)用Transaction指令

             session=sessionFactory.openSession();

             Transaction tx = session.beginTransaction();

             session.save(user);

             tx.commit();

             session.close();

          2、基于JTA的事務(wù)管理

            JTA提供了跨Session的事務(wù)管理能力,這是與JDBCTransaction最大的差異。

           JDBC事務(wù)由Connection管理,也就是說,事務(wù)管理實(shí)際上是在JDBC Connection中實(shí)現(xiàn),事務(wù)周期限于Connection的生命周期之內(nèi),對(duì)于基于JDBC Transaction的Hibernate事務(wù)管理機(jī)制,事務(wù)管理在Session所依托的JDBC Connection中實(shí)現(xiàn),事務(wù)周期限于Session的生命周期。

             JTA事務(wù)管理由JTA容器實(shí)現(xiàn),JTA容器對(duì)當(dāng)前加入事務(wù)的眾多Connection進(jìn)行調(diào)度,實(shí)現(xiàn)其事務(wù)性要求,JTA的事務(wù)周期可橫跨多個(gè)JDBC Connection生命周期,同樣,對(duì)基于JTA事務(wù)的Hibernate,JTA事務(wù)橫跨多個(gè)Session。需要注意的是,參與JTA事務(wù)的 Connection需避免對(duì)事務(wù)管理進(jìn)行干涉,如果采用JTA Transaction,就不應(yīng)該再調(diào)用Hibernate的Transaction功能。
           
           

          posted on 2007-04-25 14:16 張金鵬 閱讀(4248) 評(píng)論(1)  編輯  收藏 所屬分類: 事務(wù)編程

          Feedback

          # re: Hibernate事務(wù)管理 2012-06-05 11:21 >
          >  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 九寨沟县| 莆田市| 开鲁县| 防城港市| 永兴县| 苗栗市| 十堰市| 贵德县| 绥滨县| 沅陵县| 体育| 嘉善县| 汝阳县| 保山市| 宜兰市| 浮山县| 涞水县| 新晃| 铜川市| 达尔| 陆良县| 万盛区| 达孜县| 手机| 清新县| 安阳市| 深州市| 扎赉特旗| 东阳市| 都兰县| 雷州市| 蒙城县| 康马县| 郎溪县| 屯昌县| 房产| 尚义县| 饶河县| 阜宁县| 陆河县| 剑川县|