我正在使用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的事务管理器的方法不起作用。
我尝试过没有成功的事情
真的很感谢上述问题中的任何帮助。
答案 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>