自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hibernate事務(wù)全面介紹

開(kāi)發(fā) 后端
這里介紹Hibernate事務(wù)處理機(jī)制基于JDBC Transaction.我們也可以通過(guò)配置文件設(shè)定采用JTA作為事務(wù)管理實(shí)現(xiàn)。

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

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

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

  1. <hibernate-configuration> 
  2. <session-factory> 
  3. ……  
  4. <property name="hibernate.transaction.factory_class"> 
  5. net.sf.hibernate.transaction.JTATransactionFactory  
  6. <!--net.sf.hibernate.transaction.JDBCTransactionFactory--> 
  7. </property> 
  8. ……  
  9. </session-factory> 
  10. </hibernate-configuration> 

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

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

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

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

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

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

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

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

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

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

【編輯推薦】

  1. 描述Hibernate檢查id字段
  2. Hibernate Template簡(jiǎn)單描述
  3. Hibernate DetachedCriteria學(xué)習(xí)經(jīng)驗(yàn)
  4. 概述Hibernate equals()方法
  5. Hibernate使用Person對(duì)象
責(zé)任編輯:佚名 來(lái)源: 比特網(wǎng)
相關(guān)推薦

2009-09-25 09:46:03

Hibernate s

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2009-09-28 13:49:44

Hibernate Q

2009-09-25 17:19:28

Hibernate持久

2009-09-29 10:12:03

Hibernate A

2009-09-24 10:50:31

Hibernate主鍵

2009-09-25 16:27:33

Hibernate S

2009-09-23 15:50:21

Hibernate u

2009-09-28 16:54:34

Hibernate示例

2009-09-21 16:56:14

Hibernateibatis

2009-09-28 17:27:27

Hibernate A

2009-06-30 16:41:12

Hibernate的事

2009-09-21 17:46:34

Hibernate持久

2009-09-22 15:22:08

Hibernate性能

2009-09-22 11:24:07

Hibernate查詢

2009-09-25 11:27:19

Hibernate J

2009-06-17 11:18:02

Hibernate延遲

2009-09-27 14:41:05

Hibernate I

2009-09-22 09:27:29

Hibernate P

2009-09-25 13:55:05

Hibernate使用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)