我无法在Spring Boot 2.1.4中回滚涉及两个DAO(JDBC)的事务。 DAO实现参数化的接口。第一个DAO将记录插入三个表中,最后一个DAO将记录插入一个表中。我强迫最后一次DAO插入失败。
数据库是DB2。
某些代码:
designmatch
当我调试TransactionAspectSupport时,可以肯定FooDaoJdbc和BazDaoJdbc处于同一事务中,但是回滚似乎忽略了FooDaoJdbc。我在“ baz”表中没有记录,但是我希望这三个“ foo”表也会回滚。 我的眼睛在这一点上。我的注解放错了吗?我是否会让仿制药变得“花哨”?预先感谢您的帮助!
答案 0 :(得分:-1)
仅在引发未经检查的异常时回滚@Transactional
方法。因此,当引发异常时,您必须在add方法中抛出RuntimeException
。
@Service
public class BazServiceImpl implements FooService<Baz> {
private FooDao<Baz> bazDaoJdbc;
private FooDao<Foo> fooDaoJdbc;
@Transactional
public void add(Baz baz) {
try {
fooDaoJdbc.insert(foo);
bazDaoJdbc.insert(baz);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
}
更多信息: https://www.catalysts.cc/wissenswertes/spring-transactional-rollback-on-checked-exceptions/