hibernate - 为什么有不同类型的事务管理器?

标签 hibernate jdbc transactions spring-transactions jta

我对 Web 应用程序中不同类型的事务管理器感到困惑:

Spring 事务管理器 vs JPA 事务管理器 vs Hibernate 事务管理器 vs JTA 事务管理器 vs 数据库事务管理器

我在谷歌上搜索了上述事务管理器,但仍然不清楚。

例如:

Hibernate tx manager 使用Database tx manager

JPA tx manager 使用 Hibernate tx 经理

Spring tx manager 使用 JPA transaction managerJTA tx manager

编辑: 我的应用程序的配置示例如下: sample

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
    </bean> 

<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform</prop>
                <prop key="transaction.auto_close_session">true</prop>
                <prop key="current_session_context_class">jta</prop>

所以如果我考虑上面的例子,JPA 事务管理器是否使用 hibernate 事务管理器,而 hibernate 管理器又使用 JTA 管理器,我说得对吗?

这是否意味着每个事务管理器都使用底层事务管理器?

最佳答案

当您说“每个事务管理器都使用和底层事务管理器”时,您并不完全正确。

以Spring为例,事务策略由PlatformTransactionManager接口(interface)定义。它与 JNDI 等查找策略无关。 PlatformTransactionManager 实现的定义与 Spring Framework IoC 容器中的任何其他对象(或 bean)一样。即使在使用 JTA 时,仅此一个好处就使 Spring Framework 事务成为一个有值(value)的抽象。事务代码比直接使用 JTA 更容易测试。

因此 Spring 在数据库事务管理方面提供了多种实现可能性。

关于hibernate - 为什么有不同类型的事务管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43862775/

相关文章:

c# - 了解 Windows 中的 MSDTC

java - 在 hibernate Multi-Tenancy 应用程序中启动时不查找数据源

java - hibernate 错误 IllegalArgumentException : node to traverse cannot be null

java - 使用 JDBC/MySQL 的 SELECT 语句中的数学表达式

php - MYSQL X 带有事务的锁

transactions - 如何在EJB中执行XA事务?

java - 渴望使用 ScrollableResults 在 Hibernate 中获取集合

java - 我可以覆盖 jsr-303 验证注释吗

java - 我应该将哪个 JDBC jar 与 java 1.5.0_16 和 PostgreSQL 8.3.5 一起使用?

java - NoClassDefFound错误: org/springframework/jdbc/core/RowMapper