1. 异常没有被正确捕获
当事务执行过程中发生异常,如果异常没有被正确捕获并处理,那么事务会被回滚,但是如果异常被捕获并忽略了,那么事务就会失效,不会被回滚。
2. 事务方法内部调用另一个事务方法
当一个事务方法内部调用另一个事务方法时,如果被调用的方法没有使用@Transactional注解,那么它的事务会失效。
3. 事务方法不是public的
当事务方法不是public的时,Spring会抛出异常,此时事务也会失效。
4. 事务方法在同一个类中被调用
当事务方法在同一个类中被调用时,Spring会使用自我调用的方式执行该方法,此时@Transactional注解会失效。