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

Hibernate 基於JDBC的事務[1]

2013-11-23 20:46:01  來源: Java開源技術 

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

  Hibernate的默認事務處理機制基於JDBC Transaction我們也可以通過配置文件設定采用JTA作為事務管理實現

  Java代碼

<hibernateconfiguration>   
<sessionfactory>   
……   
<property name=hibernatetransactionfactory_class>   
netsfhibernatetransactionJTATransactionFactory   
<!netsfhibernatetransactionJDBCTransactionFactory>   
</property>   
……   
</sessionfactory>   
</hibernateconfiguration> 
<hibernateconfiguration>
<sessionfactory>
……
<property name=hibernatetransactionfactory_class>
netsfhibernatetransactionJTATransactionFactory
<!netsfhibernatetransactionJDBCTransactionFactory>
</property>
……
</sessionfactory>
</hibernateconfiguration>

  基於JDBC的事務管理將事務管理委托給JDBC 進行處理無疑是最簡單的實現方式Hibernate 對於JDBC事務的封裝也極為簡單

  我們來看下面這段代碼

  Java代碼

session = sessionFactoryopenSession();   
Transaction tx = sessionbeginTransaction();   
……   
txcommit(); 
session = sessionFactoryopenSession();
Transaction tx = sessionbeginTransaction();
……
txcommit();
從JDBC層面而言上面的代碼實際上對應著
Java代碼
Connection dbconn = getConnection();   
dbconnsetAutoCommit(false);   
……   
dbconncommit(); 
Connection dbconn = getConnection();
dbconnsetAutoCommit(false);
……
dbconncommit();

  就是這麼簡單Hibernate並沒有做更多的事情(實際上也沒法做更多的事情)只是將這樣的JDBC代碼進行了封裝而已

  這裡要注意的是在sessionFactoryopenSession()中hibernate會初始化數據庫連接與此同時將其AutoCommit 設為關閉狀態(false)而其後在SessionbeginTransaction 方法中Hibernate 會再次確認Connection 的AutoCommit 屬性被設為關閉狀態( 為了防止用戶代碼對session 的ConnectionAutoCommit屬性進行修改)

[]  []  []  []  []  


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