我们在写代码的时候,特别是用到事务注解的时候,往往就是加一下@Transaction ,或者@Transaction (rollbackFor = Exception.class),却没有想过加和不加有什么区别,rollbackFor可以写哪些值。
今天我们就把这个讲清楚

是什么

@Transaction是spring管理事务的注解,如果某个方法需要更新数据,那么就需要添加该注解,否则就无法保存成功。

默认什么都不写

这种情况,rollbackFor的默认值为UncheckedException (mark, 什么是UncheckedException, 下一篇文章学习), 包括RuntimeException和Error
当我们直接使用@Transactional不指定rollbackFor时,默认会回滚运行时异常及其子类,也就是RuntimeException及其子类,如果发生了Exception异常就不会回滚,因为Exception是RuntimeException的父类。

指定异常

我们一般都指定rollbackFor= Exception.class, 标识如果是Exception类型的异常都会回滚,Exception是所有异常的父类,这样就都能回滚了。

异常关系图如下

file

本文由博客一文多发平台 OpenWrite 发布!

小强先森
1 声望0 粉丝