Springboot hibernate 事务不回滚
问题排查
1,首先需要在启动类上添加注解 @EnableTransactionManagement
2,在public方法上添加注解 @Transactional
3,如果使用了try来捕获异常,可以手动添加代码 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 来回滚异常
注意,数据库方言应该使用如下
org.hibernate.dialect.MySQL5InnoDBDialect
通常,经过上面的3步即可
但是如果你使用的mysql,那么可能还是无法回滚
因为你的数据库使用的引擎是 MyISAM 他是事务不安全的,我们应该使用 InnoDB
如果在切换引擎时出现类似于这种错误
Table storage engine for '#sql-xxx' doesn't have this option
那么可能的原因是该表是一张静态表[static/fixed ]
我们可以执行如下语句,将其设定为动态表即可
ALTER TABLE 表名 ROW_FORMAT = DYNAMIC
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情