0
我有這樣的情況:嵌套Spring的事務與Hibernate
@Component @Transactional
public class Test{
public void mainMetod(){
//do some changes on db
classA.method1();
classA.method2();
}
}
@Component @Transactional
public class A{
public method1(){
//read some data from db that Test class wrote
}
public method2(){
//read some data from db that Test class wrote
}
}
和app-JPA-config.xml中
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> -->
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven />
我試圖實現這種行爲:
- 我希望A類的方法1可以看到寫在Test類的主方法中的數據
- 我想要在方法1中是否存在異常時,僅返回僅由method1()進行的修改而不回滾由Test類的mainMethod進行的修改。 我需要讀取測試類mainMethod寫的更新數據
- 我想,如果在method2中有一個異常,只有通過method2()進行回滾利益修改,而不是由測試類mainMethod進行的回滾修改。 我需要閱讀mainMethod測試類的寫更新的數據
如果我使用默認的傳播,我到達的第一個請求(可讀取的數據寫到由mainmethod),但我不能達到第二個請求:回滾在方法1/2中回滾整個事務。
如果我使用傳播REQUIRES_NEW,我實現第二個請求,但不是一個。
我認爲唯一的方法是使用TransactionTemplate的手動事務。我的假設是否正確?