熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Hibernate 基於JDBC的事務[2]

2013-11-23 20:45:59  來源: Java開源技術 

  這也就是說我們一開始從SessionFactory獲得的session其自動提交屬性就已經被關閉(AutoCommit=false)下面的代碼將不會對數據庫產生任何效果

  Java代碼

session = sessionFactoryopenSession();   
sessionsave(user);   
sessionclose(); 
session = sessionFactoryopenSession();
sessionsave(user);
sessionclose();

  這實際上相當於 JDBC Connection的AutoCommit屬性被設為false執行了若干JDBC操作之後沒有調用commit操作即將Connection關閉如果要使代碼真正作用到數據庫我們必須顯式的調用Transaction指令

  Java代碼

session = sessionFactoryopenSession();   
Transaction tx = sessionbeginTransaction();   
sessionsave(user);   
txcommit(); &n

bsp; 
sessionclose(); 
session = sessionFactoryopenSession();
Transaction tx = sessionbeginTransaction();
sessionsave(user);
txcommit();
sessionclose();

  基於JTA的事務管理

  JTA 提供了跨Session 的事務管理能力這一點是與JDBC Transaction 最大的差異

  JDBC事務由Connnection管理也就是說事務管理實際上是在JDBC Connection中實現事務周期限於Connection的生命周期之類同樣對於基於JDBC Transaction的Hibernate 事務管理機制而言事務管理在Session 所依托的JDBC Connection中實現事務周期限於Session的生命周期

  JTA 事務管理則由 JTA 容器實現JTA 容器對當前加入事務的眾多Connection 進 行調度實現其事務性要求JTA的事務周期可橫跨多個JDBC Connection生命周期同樣對於基於JTA事務的Hibernate而言JTA事務橫跨可橫跨多個Session

  JTA 事務是由JTA Container 維護而參與事務的Connection無需對事務管理進行干涉這也就是說如果采用JTA Transaction我們不應該再調用HibernateTransaction功能 上面基於JDBC Transaction的正確代碼這裡就會產生問題

[]  []  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/ky/201311/29038.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.