我有一个服务,它有几个标有 的方法@Transactional
,包括方法 a、b 和 c。这3个方法嵌套如下:a -> b -> c。这是一个代码示例:
@Transactional
public void a() {
while(condition) {
try {
b();
} catch(MyException e) {
logger.warn(e.getMessage());
}
}
}
然而,方法 b 的注释如下:
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {MyException.class})
但是,当MyException
从方法 c 抛出时,异常在方法 a 处被捕获,当该异常退出时,事务被提交,其中包括通过调用 b() 所做的任何事情,该调用引发了异常并且应该回滚(? )。我正在使用带有 spring 3.0.7 的 sql server 2012 express,我的 spring 配置是这样的:
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<qualifier value="txm1"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceXmlLocation" value="classpath:META-INF/jpa-persistence.xml"/>
<property name="persistenceUnitName" value="Unit1" />
</bean>