【问题标题】:Spring JTATransactionManager fails to bind Hibernate and JDBC in a single sessionSpring JTATransactionManager 无法在单个会话中绑定 Hibernate 和 JDBC
【发布时间】:2012-11-13 02:25:10
【问题描述】:

我使用 JTATransactionManager 来管理事务。我想用 Spring 的 @Transactional 注释包装的一段代码有 2 个数据库调用——一个使用 Hibernate SessionFactory,另一个使用普通 JDBC。两者都使用相同的数据源。因此,我希望两者都受同一个事务的约束。

但它看起来不像使用了一个事务。相反,每个人都打开自己的事务。这可能是什么原因。 ?如何确保使用单个事务来绑定这两个操作。 ?

如果需要,我可以提供配置和代码。

【问题讨论】:

    标签: java spring hibernate jta


    【解决方案1】:

    确保在您的两个数据库调用中,您都使用 Propagation.NESTED as 传播

      @Transactional(propagation=Propagation.NESTED) 
    

    在包装方法中,您提到Propagation.REQUIRED orPropagation.REQUIRED_NEW` 为

      @Transactional(propagation=Propagation.REQUIRED)
    

      @Transactional(propagation=Propagation.REQUIRED_NEW)
    

    通过这样做,您提到两个 DB 调用都将继承包装器方法的事务边界。

    【讨论】:

    • 我没有为我工作。基本上,我用@Transactional(propagation=Propagation.REQUIRED) 注释了我的服务中的包装器方法,并用@Transactional(propagation=Propagation.NESTED) 注释了同一服务中的2 个数据库调用方法。所以包装器方法在同一个服务中调用这两种方法。这是你建议的..?
    • @AnandHemmige:是的。另外我认为您需要配置 spring 以将注释基础事务用作<tx:annotation-driven transaction-manager="transactionManager"/>。在语句中使用您的事务管理器名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2011-05-09
    • 2011-12-11
    • 2014-07-03
    • 2017-12-10
    相关资源
    最近更新 更多