注:该文档只记录本人目前项目中遇到的使用@Transactional注解开启事务失效的情况,并非所有情况,仅可作排除原因的参考文档,欢迎各位大佬补充。
可能原因1:使用@Transactional的方法被同一个类的其他方法调用
假设A方法使用@Transactional开启事务,在同一个类里,有B方法调用了A,此时事务会失效;
可能原因2:需要回滚的sql语言是DDL数据定义语言
DDL数据定义语言有:create、drop、alter等,这些sql语句是自动提交的,所以不能回滚,事务失效。
需要注意的是,即使是增删改数据的sql,如果下面代码出现了ddl语言,也会自动提交,导致事务失效。