图1
图2
图3
我的问题是要执行@Transactional时,如果另一个方法在子类里,也是要加@Transactional的对吧?
如果是业务允许可以一个执行成功,而另一个不执行成功就没问题了.
但是我这里是要求都保存成功.
图1
图2
图3
我的问题是要执行@Transactional时,如果另一个方法在子类里,也是要加@Transactional的对吧?
如果是业务允许可以一个执行成功,而另一个不执行成功就没问题了.
但是我这里是要求都保存成功.
15 回答8.4k 阅读
8 回答6.2k 阅读
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.6k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
一、首先@Transactional有以下几种情况是失效的,请先确定你的环境包不包括:
1、@Transactional修饰了非public方法;
2、@Transactional修饰的方法所属类没有被spring托管;
3、@Transactional修饰的方法被当前类没有@Transactional修饰的方法调用;
4、@Transactional修饰方法中指定rollbackOn回滚异常,但方法中抛出了与之不匹配的异常时;
5、@Transactional修饰的方法中使用try{} catch{}捕获了异常且没有重新抛出异常(默认只针抛出Error和RuntimeException及其子类时回滚);
6、@Transactional注解指定了传播方式为Propagation.NOT_SUPPORTED,即禁止事务了;
7、数据库本身不支持事务(这种情况很少见)。
二、针对你的问题,@Transactional修饰的方法里调用了没有被@Transactional修饰的方法时,会不会触发事务?答案是会。被调用的方法会使用父方法(即被@Transactional修饰的方法)的事务上下文,被调用的方法抛出异常会触发事务回滚!