天天看點

jdbc和jta方式事務管理的差別

hibernate的兩種事務管理jdbc 和jta方式。下邊說說兩者的差別

一、說明一下jdbc和jta方式事務管理的差別:

JDBC事務由Connnection管理,也就是說,事務管理實際上是在JDBC Connection

中實作。事務周期限于Connection的生命周期之内

JTA 事務管理則由 JTA 容器實作,JTA 容器對目前加入事務的衆多Connection 進

行排程,實作其事務性要求。JTA的事務周期可橫跨多個JDBC Connection生命周期。

二、在了解jdbc和jta事務的基礎上,再來讨論hibernate的兩種事務

對于基于JDBC Transaction的Hibernate 事務管理機制而言,事務管理在Session 所依托的JDBC Connection

中實作,事務周期限于Session的生命周期。

對于基于JTA事務的Hibernate而言,JTA事務橫跨可橫跨多個Session。

三、hibernate中寫法的不同

jdbc的寫法

Java代碼

1.public void saveUser(){

2. Session session = sessionFactory.openSession();

3. Transaction tx = session.beginTransaction();

4. session.save(user);

5. tx.commit();

6. session.close();

7.}

public void saveUser(){

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

session.save(user);

tx.commit();

session.close();

}必須在session.close()之前commit或者rollback

jta寫法

Java代碼

1.public void saveUser(){

2. Session session = sessionFactory.openSession();

3. Transaction tx = session.beginTransaction();

4.

5. session.save(user);

6. session.close();

7.

8. Session session1 = sessionFactory.openSession();

9. session1.save(user1);

10. session.close();

11.

12. tx.commit();

13.}

public void saveUser(){

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

session.save(user);

session.close();

Session session1 = sessionFactory.openSession();

session1.save(user1);

session.close();

tx.commit();

}commit和rollback可以在session.close()之後執行.

同時應該注意的一點是,事務是不能嵌套的,在使用jta的事務的情況下,如果要讓一個事務跨越兩個

session,則必須在兩個session的外層開始事務和完成事務。而不能再在session内部開始事務和完成事務。

繼續閱讀