1. checked异常和unchecked异常

Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback;如果发生的异常是checked异常,默认情况下数据库操作还是会提交的。

1. checked异常, 一般是指程序不能直接控制的外界情况,是指在编译的时候就需要检查的一类exception,用户程序中必须采用try catch机制处理或者通过throws交由调用者来处理。这类异常,主要指除了Error以及RuntimeException及其子类之外的异常

2. unchecked异常: 程序的逻辑错误,是RuntimeException的子类,比如IllegalArgumentException, NullPointerException和IllegalStateException。
不需要在代码中显式地捕获unchecked异常做处理。

因此在有对异常封装且有回滚注解的时候,如果希望回滚生效,保证以下之一:

1. 抛继承自 RuntimeException的异常

2.注解后面加条件@Transactional( rollbackFor = myException.class)


Follow your heart ~!