2014-01-15 62 views
2

我使用HibernateTemplate(3.6.7.Final)和Spring Data JPA(1.3.0.RELEASE)的Spring(3.1.4發佈)。 我在配置文件中定義了兩個事務管理器,一個用於Hibernate,另一個用於Spring Data JPA。兩個事務管理器都使用不同的數據源。有兩個事務管理器的Spring事務註釋

<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 /> 

對於春季運行方法數據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」)。

真的很感謝在上述問題上的任何幫助。

回答

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>