SQL语句在哪些条件下会回滚【java,spring】

1.@Transactional 注解应该只被应用到 public 方法上
2.spring 只有在抛出的异常为运行时 unchecked 异常时才回滚该事务
3.Errors也会导致事务回滚
4.IOException是Checked Exception
5.spring的@Transactional事务生效的一个前提是进行方法调用前经过拦截器TransactionInterceptor,也就是说只有通过TransactionInterceptor拦截器的方法才会被加入到spring事务管理中,查看spring源码可以看到,在AdvisedSupport.getInterceptorsAndDynamicInterceptionAdvice方法中会从调用方法中获取@Transactional注解,如果有该注解,则启用事务,否则不启用。
在这里插入图片描述

这个方法是通过spring的AOP类CglibAopProxy的内部类DynamicAdvisedInterceptor调用的,而DynamicAdvisedInterceptor继承了MethodInterceptor,用于拦截方法调用,并从中获取调用链。如果是在同一个类中的方法调用,则不会被方法拦截器拦截到,因此事务不会起作用,必须将方法放入另一个类,并且该类通过spring注入。
(第5条来自转载)

例题:

method()方法如下,method()如果调用下面5个不同的update()方法,哪些SQL会被回滚 (多选):
 @Service
 public class TestService {
     @Resource
   TestService testService;
   
   public void method() {
     1. update1();
     ======================
     2. testService.update2();
     ======================
     3. testService.update3();
     ======================
     4. testService.update4();
     ======================
     5. testService.update5();
   }
   @Transactional
   public void update1() {
     //SQL_1
     throw new Exception();
   }
   @Transactional
   public void update2() {
     //SQL_2
     throw new Exception();
   }
   @Transactional
   private void update3() {
     //SQL_3
     throw new Exception();
   }
   @Transactional
   public void update4() {
     //SQL_4
     throw new Error();
   }
   @Transactional
   public void update5() {
     //SQL_5
     throw new IOException();
   }
 }
 
 A. SQL_1
 
 B. SQL_5
 
 C. SQL_2
 
 D. SQL_3
 
 E. SQL_4

答案:CE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值