閱讀747 返回首頁    go 阿裏雲 go 技術社區[雲棲]


第十三章 事務並發處理

         HibernateJDBC的輕量級封裝,本身並不具備事務管理能力,在事務管理層,Hibernate將其委托給底層的JDBC或者JTA,以實現事務的管理和調度。

         Hibernate的默認事務處理機製基於JDBCTransaction,也可以通過配置文件設定采用JTA作為事務管理實現。

14.1基於JDBC的事務管理

           這裏要注意的是,在sessionFactory.openSession()中,Hibernate會初始化數據庫連接,與此同時,將其AutoCommit設為關閉狀態,這就是說,從SessionFactory獲得session,其自動提交屬性就已經被關閉了,下麵的代碼不會對事務性數據庫產生任何效果。

  

	 session=sessionFactory.openSession();
  	 session.save(user);
         session.close();

如果要使得代碼真正作用到數據庫,必須顯示的調用Transaction指令

  

   session=sessionFactory.openSession();
   Transactiontx = session.beginTransaction();
   session.save(user);
   tx.commit();
   session.close();

14.2基於JTA的事務管理

          JTA,即JavaTransaction API,譯為Java事務API


        JTA允許應用程序執行分布式事務處理——在兩個或多個網絡計算機資源上訪問並且更新數據。JDBC驅動程序的JTA支持極大地增強了數據訪問能力。


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


JDBC事務由Connection管理,也就是說,事務管理實際上是在JDBCConnection中實現,事務周期限於Connection的生命周期之內,對於基於JDBCTransactionHibernate事務管理機製,事務管理在Session所依托的JDBCConnection中實現,事務周期限於Session的生命周期。


 JTA事務管理由JTA容器實現,JTA容器對當前加入事務的眾多Connection進行調度,實現其事務性要求,JTA的事務周期可橫跨多個JDBCConnection生命周期,同樣,對基於JTA事務的HibernateJTA事務橫跨多個Session。需要注意的是,參與JTA事務的Connection需避免對事務管理進行幹涉,如果采用JTATransaction,就不應該再調用HibernateTransaction功能。


JTA一般用於跨數據庫的事務,由應用JTA容器實現。可在tomcat中配置jta。一般JTA整合Spring使用更加方便。


HibernateJTA配置

<property name="hibernate.transaction.factory_class">
			org.hibernate.transaction.JTATransactionFactory
		</property>


最後更新:2017-04-03 18:52:12

  上一篇:go silverlight 4 tools for visual studio 2010無法安裝
  下一篇:go 第十二章 hibernate緩存