Hibernate 是JDBC 的輕量級封裝本身並不具備事務管理能力在事務管理層Hibernate將其委托給底層的JDBC或者JTA以實現事務管理和調度功能
Hibernate的默認事務處理機制基於JDBC Transaction我們也可以通過配置文件設定采用JTA作為事務管理實現
Java代碼
<hibernate
configuration>
<session
factory>
……
<property name=
hibernate
transaction
factory_class
>
net
sf
hibernate
transaction
JTATransactionFactory
<!
net
sf
hibernate
transaction
JDBCTransactionFactory
>
</property>
……
</session
factory>
</hibernate
configuration>
<hibernate
configuration>
<session
factory>
……
<property name=
hibernate
transaction
factory_class
>
net
sf
hibernate
transaction
JTATransactionFactory
<!
net
sf
hibernate
transaction
JDBCTransactionFactory
>
</property>
……
</session
factory>
</hibernate
configuration>
基於JDBC的事務管理將事務管理委托給JDBC 進行處理無疑是最簡單的實現方式Hibernate 對於JDBC事務的封裝也極為簡單
我們來看下面這段代碼
Java代碼
session = sessionFactory
openSession();
Transaction tx = session
beginTransaction();
……
tx
commit();
session = sessionFactory
openSession();
Transaction tx = session
beginTransaction();
……
tx
commit();
從JDBC層面而言
上面的代碼實際上對應著
Java代碼
Connection dbconn = getConnection();
dbconn
setAutoCommit(false);
……
dbconn
commit();
Connection dbconn = getConnection();
dbconn
setAutoCommit(false);
……
dbconn
commit();
就是這麼簡單Hibernate並沒有做更多的事情(實際上也沒法做更多的事情)只是將這樣的JDBC代碼進行了封裝而已
這裡要注意的是在sessionFactoryopenSession()中hibernate會初始化數據庫連接與此同時將其AutoCommit 設為關閉狀態(false)而其後在SessionbeginTransaction 方法中Hibernate 會再次確認Connection 的AutoCommit 屬性被設為關閉狀態( 為了防止用戶代碼對session 的ConnectionAutoCommit屬性進行修改)
[] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29042.html