av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Hibernate事務(wù)全面介紹

Hibernate有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate事務(wù),包括介紹在sessionFactory.openSession()中,Hibernate會初始化數(shù)據(jù)庫連接等方面。

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

Hibernate事務(wù)處理機(jī)制基于JDBC Transaction.我們也可以通過配置文件設(shè)定采用JTA作為事務(wù)管理實現(xiàn):

 
 
 
  1. ……
  2.  name="hibernate.transaction.factory_class">
  3. net.sf.hibernate.transaction.JTATransactionFactory
  4. ……

基于JDBC的事務(wù)管理將事務(wù)管理委托給JDBC 進(jìn)行處理無疑是最簡單的實現(xiàn)方式,Hibernate事務(wù)對于JDBC事務(wù)的封裝也極為簡單。
我們來看下面這段代碼:

 
 
 
  1. session = sessionFactory.openSession();
  2. Transaction tx = session.beginTransaction();
  3. ……
  4. tx.commit();

從JDBC層面而言,上面的代碼實際上對應(yīng)著:

 
 
 
  1. Connection dbconn = getConnection();
  2. dbconn.setAutoCommit(false);
  3. ……
  4. dbconn.commit();

就是這么簡單,Hibernate并沒有做更多的事情(實際上也沒法做更多的事情),只是將這樣的JDBC代碼進(jìn)行了封裝而已。

這里要注意的是,在sessionFactory.openSession()中,hibernate會初始化數(shù)據(jù)庫連接,與此同時,將其 AutoCommit 設(shè)為關(guān)閉狀態(tài)(false)。而其后,在Session.beginTransaction 方法中,Hibernate 會再次確認(rèn)Connection 的AutoCommit 屬性被設(shè)為關(guān)閉狀態(tài)( 為了防止用戶代碼對session 的Connection.AutoCommit屬性進(jìn)行修改)。

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

 
 
 
  1. session = sessionFactory.openSession();
  2. session.save(user);
  3. session.close();

這實際上相當(dāng)于 JDBC Connection的AutoCommit屬性被設(shè)為false,執(zhí)行了若干JDBC操作之后,沒有調(diào)用commit操作即將Connection關(guān)閉。如果要使代碼真正作用到數(shù)據(jù)庫,我們必須顯式的調(diào)用Transaction指令:

 
 
 
  1. session = sessionFactory.openSession();
  2. Transaction tx = session.beginTransaction();
  3. session.save(user);
  4. tx.commit();
  5. session.close();

本文名稱:Hibernate事務(wù)全面介紹
文章出自:http://uogjgqi.cn/article/dpjidcd.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流