@事务服务方法,通过参数化接口实现两个DAO

时间:2019-05-20 22:26:01

标签: spring transactional

我无法在Spring Boot 2.1.4中回滚涉及两个DAO(JDBC)的事务。 DAO实现参数化的接口。第一个DAO将记录插入三个表中,最后一个DAO将记录插入一个表中。我强迫最后一次DAO插入失败。

数据库是DB2。

某些代码:

designmatch

当我调试TransactionAspectSupport时,可以肯定FooDaoJdbc和BazDaoJdbc处于同一事务中,但是回滚似乎忽略了FooDaoJdbc。我在“ baz”表中没有记录,但是我希望这三个“ foo”表也会回滚。 我的眼睛在这一点上。我的注解放错了吗?我是否会让仿制药变得“花哨”?预先感谢您的帮助!

1 个答案:

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