我对 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 manager
或 JTA 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/