首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Hibernate 事務配置詳解:JDBC 本地事務 vs JTA 分布式事務

     編輯:Java 綜合教學

兩大事務模式對比

維度JDBC 事務JTA 事務
適用場景單數據源、本地資源管理多分據源、跨資源管理器(XA)
實現原理調用 Connection.commit/rollback委託 JTA TransactionManager 協調兩階段提交
配置複雜度低,默認模式高,需應用服務器支持(如 JBoss、WebLogic)
性能開銷輕量較重(協調器、日誌、鎖)

Hibernate 配置文件聲明

1. JDBC 事務(默認,可省略)

<property name="hibernate.transaction.factory_class">
    org.hibernate.transaction.JDBCTransactionFactory
</property>
<property name="hibernate.current_session_context_class">thread</property>

JDBC 事務配置截圖

2. JTA 事務(需容器環境)

<property name="hibernate.transaction.factory_class">
    org.hibernate.transaction.JTATransactionFactory
</property>
<property name="hibernate.transaction.manager_lookup_class">
    org.hibernate.transaction.JBossTransactionManagerLookup  // 視容器而定
</property>
<property name="hibernate.current_session_context_class">jta</property>

JTA 事務配置截圖

代碼中統一使用模式

Session session = sessionFactory.openSession();
Transaction tx = null;
try {
    tx = session.beginTransaction();
    // 業務操作
    tx.commit();
} catch (Exception e) {
    if (tx != null) tx.rollback();
    throw e;
} finally {
    session.close();
}

無論底層是 JDBC 還是 JTA,上層 API 保持一致,實現了事務策略的透明切換。

選型建議

  • 單庫應用、微服務獨立數據庫 → JDBC 事務。
  • 跨庫轉賬、訂單-庫存扣減等強一致性分布式場景 → JTA 或柔性事務(TCC、Saga、本地消息表)。
  • Spring 管理 Hibernate 時,通常在 Spring 層面聲明 @Transactional,由 HibernateTransactionManager (JDBC) 或 JtaTransactionManager (JTA) 代理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved