我们正在使用JPA(Hibernate 4)和Spring 4来管理JTA事务。为了允许延迟初始化,即使只是在没有任何事务的情况下从数据库中读取,我们也添加了“OpenEntityManager”模式。
然而,在激活此模式的情况下,Spring也尝试将已经打开的实体管理器加入SUPPORTS事务(EntityManagerFactoryUtils.doGetTransactionalEntityManager
)。然而,Hibernate以(某种程度上误导性的)警告拒绝了这个请求:
WARN: HHH000326: Cannot join transaction: do not override hibernate.transaction.factory_class
我认为只有在joinTransaction()
?
TransactionSynchronizationManager.isActualTransactionActive()
您可以在GitHub上找到这些问题的测试用例https://github.com/abenneke/sandbox/tree/master/spring-hibernate4-transaction
谢谢!
(我们现在通过简单地添加另一个EntityManagerProxy来解决此警告,如果没有实际的事务处于活动状态,则跳过任何joinTransaction()
请求。)
2015年7月更新: 我现在为此创建了一个改进请求: https://jira.spring.io/browse/SPR-13242
答案 0 :(得分:0)
HHH000326"在我们称之为EntityManager.joinTransaction()的某个地方实际上是我们软件的一个问题,在Hibernate 4.1中不再需要它。" 将此问题视为同一问题:https://forum.hibernate.org/viewtopic.php?p=2455341&