Spring JTATransactionManager无法在单个会话中绑定Hibernate和JDBC

时间:2012-11-13 02:25:10

标签: java spring hibernate jta

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

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

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

1 个答案:

答案 0 :(得分:0)

确保在两个数据库调用中,将传播用作Propagation.NESTED

  @Transactional(propagation=Propagation.NESTED) 

在包装器方法中,你提到Propagation.REQUIRED or Propagation.REQUIRED_NEW`为

  @Transactional(propagation=Propagation.REQUIRED)

  @Transactional(propagation=Propagation.REQUIRED_NEW)

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