spring - 我可以在一个事务中使用指向同一数据源的两个不同的实体管理器吗?

标签 spring jpa transactions jta spring-transactions

我正在将 Spring 与 JPA 一起使用。我有两个 EntityManager,它们包含不同的实体(一个应用程序的不同模块),并且都指向相同的数据源。

我可以在一个事务中使用它们(使用单个 TransactionManager)吗? 我必须使用 JTA 吗?如果是这样,在 tomcat 下使用它的最佳选择是什么?

如何在 spring 中配置它?

最佳答案

标准 JPA 事务和 Spring 的 JpaTransactionManager 都绑定(bind)到单个 EntityManager。他们无法与多个经理交谈,因此无法协调他们之间的事务。

如果您需要这样做,您要么需要合并实体管理器配置,这样您就只有一个 EntityManager,或者使用 JTA 事务(通过 Spring 的 JtaTransactionManager)。

如果您使用 Tomcat(它没有现成的 JTA 支持),那么您需要找到第三方 JTA 实现。

关于spring - 我可以在一个事务中使用指向同一数据源的两个不同的实体管理器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9005759/

相关文章:

java - 如何在freemarker中转义json字符串

java - JPA:保存具有多对一的实体时违反主键

mysql - 共享数据的一致性,使陈旧数据对象的写入无效

mysql - 事务中的MySQL错误处理

java - 在由许多子类扩展的父类(super class)中 Autowiring Spring bean

java - 你在哪里定义spring bean配置文件

java - 如何让任务x在计划任务y之后运行

java - jpql left join fetch 不返回类似的结果

java - JOOQ 中的提交钩子(Hook)

hibernate - 中止由 @Transactional 创建的事务但正确返回(不抛出异常)