【问题标题】:Transaction propagation SUPPORTS leads to "HHH000326: Cannot join transaction" warning事务传播支持导致“HHH000326:无法加入事务”警告
【发布时间】: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


    【解决方案1】:

    HHH000326 “这实际上是我们的软件在我们调用 EntityManager.joinTransaction() 的某个地方的问题,在 Hibernate 4.1 中不再需要它。” 将此作为同一个问题进行检查:https://forum.hibernate.org/viewtopic.php?p=2455341&

    【讨论】:

    • 感谢您对您的软件的深入了解 - 但在我的情况下,这是 Spring 中的一个错误,自 Spring 4.2 以来已修复。
    • 很抱歉,我只是复制了链接在网络上显示的文字。我使用 Spring 4.1(cry)。
    猜你喜欢
    • 2011-09-20
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多