這也就是說我們一開始從SessionFactory獲得的session其自動提交屬性就已經被關閉(AutoCommit=false)下面的代碼將不會對數據庫產生任何效果
Java代碼
session = sessionFactory
openSession();
session
save(user);
session
close();
session = sessionFactory
openSession();
session
save(user);
session
close();
這實際上相當於 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