带有两个事务管理器的Spring事务注释

带有两个事务管理器的Spring事务注释,spring,hibernate,transactions,spring-data-jpa,Spring,Hibernate,Transactions,Spring Data Jpa,我正在使用Spring(3.1.4版本)和HibernateTemplate(3.6.7.Final)以及Spring数据JPA(1.3.0.release)。 我在配置文件中定义了两个事务管理器,一个用于Hibernate,另一个用于SpringDataJPA。两个事务管理器都使用不同的数据源 <bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

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

<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的事务管理器的方法工作正常,但使用SpringDataJPA的事务管理器的方法不工作

我试着做一些事情,但没有成功

  • 在两个事务管理器中使用两个
  • 注释@Transactional(value=“jpaTransactionManager”)中的 类级别和方法级别

非常感谢您在上述问题上提供的帮助。

尝试显式命名事务管理器。除了默认的“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>

@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
}
<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>