Spring事务注释与两个事务管理器

时间:2014-01-15 12:59:41

标签: spring hibernate transactions spring-data-jpa

我正在使用Spring(3.1.4版本)和HibernateTemplate(3.6.7.Final)以及Spring Data JPA(1.3.0.RELEASE)。 我在配置文件中定义了两个事务管理器,一个用于Hibernate,另一个用于Spring Data JPA。两个事务管理器都使用不同的数据源。

<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id="transactionTemplate"      class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="transactionManager" />
</bean>

我希望我的代码中有一些方法可以使用Hibernate的事务管理器和一些方法来使用Spring数据JPA的事务管理器。 (Spring Doc link - 10.5.6.2使用@Transactional的多个交易管理器

我在配置文件中定义了注释驱动的事务,默认情况下是选择Hibernate的事务模板

<tx:annotation-driven />

对于使用Spring Data JPA的事务管理器运行方法我在我的方法定义中提到事务管理器的名称,即@Transactional(value =“jpaTransactionManager”),但是在DB中插入记录之后,线程被挂起并且进一步的代码是不叫。

@Transactional(value = "jpaTransactionManager")
public void transactionMethod()
{
Object obj = createObj();
repository.save(obj); //data is inserted in DB here but after that thread is getting hanged here and below business logic is not called

// Some business logic
}

使用Hibernate的事务管理器的方法工作正常,但使用Spring Data JPA的事务管理器的方法不起作用。

我尝试过没有成功的事情

  • 两个事务管理器使用两个。
  • 注释@Transactional(value =“jpaTransactionManager”) 班级和方法水平。

真的很感谢上述问题中的任何帮助。

1 个答案:

答案 0 :(得分:0)

尝试显式命名事务管理器。除了默认的“transactionManager”之外还使用两者,并更新所有bean引用以明确说明它们需要哪个transactionManager。另外,我认为你需要两个“”声明。

这样的事情:

<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>
<tx:annotation-driven transaction-manager="jpaTransactionManager"/>

<bean id="transactionTemplate"      class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="hibernateTransactionManager" />
</bean>