我有这样的事情:
@Service
@Transactional
public class ServiceA {
@Autowired
SomeDAO1 dao1;
@Autowired
ServiceB serviceB;
public void methodServiceA() {
serviceB.someMethodThatRunsInsertIntoDB();
dao1.anotherMethodThatRunsInsertIntoDB();
}
}
@Service
@Transactional
public class ServiceB {
@Autowired
Dao2 dao2;
public void someMethodThatRunsInsertIntoDB() {
dao2.insertXXX();
}
}
我的问题是:如果serviceB.someMethodThatRunsInsertIntoDB()
执行成功但是dao1.anotherMethodThatRunsInsertIntoDB()
抛出异常,所做的更改serviceB
没有回滚。我需要回滚这些更改,以防发生异常dao1.anotherMethodThatRunsInsertIntoDB()
。我怎样才能做到这一点?
// 已编辑
spring-servlet.xml 中的事务配置
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
</bean>
如果一个 dao 使用 EntityManager 而另一个 dao 使用 JdbcTemplate 与 DB 交互,这是否相关?
//更新--EntityManager配置
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
</bean>
</property>
你需要通过rollbackFor
参数与您检查的异常的类型。默认情况下,Spring 似乎仅在未检查的异常上进行回滚。更多细节:Spring事务:异常或Throwable回滚 https://stackoverflow.com/questions/21188239/spring-transaction-rollback-on-exception-or-throwable
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)