总结:
前提:传播机制默认为REQUIRED
- 一个类中,一个没有事务的方法A调用本类另外一个有事务注解(@Transational)的方法B,注解是不会生效的。B中异常时,B中sql不回滚;如果调用的是其他类有事务的方法C,C中异常时,C中的sql会回滚。
- 一个类中,一个有事务的方法A调用本类中的方法B,B中出现异常,无论B有没有事务,sql都会回滚,A中sql也会回滚;如果将B中异常try/catch住,默认情况A中的sql不会回滚,B(无论有没有事务)中的sql也不回滚;精彩的来了,如果A调用的是其他类的方法C,C中出现异常,如果C有事务,即使A中try/catch住,A中的sql也会回滚,如果C没有事务,try/catch后A不会回滚。
测试用例一 在同一个类中,A不添加事务,B添加事务,A中调用B,B中更新数据库,然后抛异常,结果B的事务是不回滚的,数据会被更新。
测试用例二 在同一个类中,方法A不加事务,调用其他类带有事务的方法B,B中出现异常,B中的sql会回滚