【发布时间】:2014-12-07 17:31:06
【问题描述】:
我们使用 JPA (Hibernate 4) 和 Spring 4 管理 JTA 事务。为了在没有任何事务的情况下简单地从数据库中读取时也允许延迟初始化,我们添加了“OpenEntityManager”模式。
但是,当此模式处于活动状态时,Spring 也会尝试将已经打开的实体管理器加入到 SUPPORTS 事务中 (EntityManagerFactoryUtils.doGetTransactionalEntityManager)。然而,Hibernate 拒绝了这个请求,并带有一个(有点误导)警告:
WARN: HHH000326: Cannot join transaction: do not override hibernate.transaction.factory_class
我认为只有在TransactionSynchronizationManager.isActualTransactionActive() 时才应该调用joinTransaction()?
您可以在 GitHub https://github.com/abenneke/sandbox/tree/master/spring-hibernate4-transaction 上找到这些问题的测试用例
谢谢!
(我们现在通过简单地添加另一个 EntityManagerProxy 来解决此警告,如果没有实际的事务处于活动状态,则跳过任何 joinTransaction() 请求。)
2015 年 7 月更新: 我现在为此创建了一个改进请求: https://jira.spring.io/browse/SPR-13242
【问题讨论】:
标签: spring hibernate jpa transactions spring-transactions