文章转自:https://blog.csdn.net/u011410529/article/details/54287307
@Transactional注解事务
什么情况下生效:
在此,我们先了解一下检查性异常和非检查性异常的定义和区别:
1、所有的检查性异常都继承自java.lang.Exception;所有的非检查性异常都继承自java.lang.RuntimeEx ception。
2、检查性异常和非检查性异常最主要的区别在于其处理异常的方式:检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。
3、常见的运行时异常:空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等;
常见的检查性异常:输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)等。
@Transactional注解只对public生效,private、protected等是没有效果的,运行中也不会报错。
@Transactional只有对非检查性异常才会生效事务回滚,对检查性异常是不会的。
以下非检查异常抛出前保存了,但是由于是非检查异常,事务回滚喔。
以下检查异常抛出前保存了,事务就不回滚喔。
解决方法;
1、检查你方法是不是public的
2、你的异常类型是不是unchecked异常
如果我想check异常也想回滚怎么办,注解上面写明异常类型即可
@Transactional(rollbackFor=Exception.class)