【问题标题】:Can I use two different entity managers that point to the same datasource in one transaction?我可以在一个事务中使用两个指向同一数据源的不同实体管理器吗?
【发布时间】:2012-02-18 19:36:19
【问题描述】:
我在 JPA 中使用 spring。我有两个 EntityManager,它们包含不同的实体(一个应用程序的不同模块),并且都指向同一个数据源。
我可以在一个事务中同时使用它们(使用单个 TransactionManager)吗?
我必须为此使用JTA吗?如果是这样,在 tomcat 下使用它的最佳选择是什么?
spring如何配置?
【问题讨论】:
标签:
spring
jpa
transactions
jta
spring-transactions
【解决方案1】:
标准 JPA 事务和 Spring 的 JpaTransactionManager 都绑定到一个 EntityManager。他们无法与多个经理交谈,因此无法协调他们之间的交易。
如果您需要这样做,您需要合并您的实体管理器配置,这样您就只有一个EntityManager,或者使用 JTA 事务(通过 Spring 的 JtaTransactionManager)。
如果您使用的是 Tomcat(它没有开箱即用的 JTA 支持),那么您需要找到第三方 JTA 实现。