前几天发现程序有个Bug:使用JPA已经设置了回滚,但抛出异常后,提交的事务并没有回滚。

刚开始以为是JPA使用问题,debug了近2个多小时竟然找不到原因。

后来上网查了一下,才发现不是程序问题(坑爹啊,看来自己对mysql还是不熟),是数据库表问题(JPA自动建表)。


原因如下:


mysql建表时如果指定ENGINE=MyISAM,事务是无法回滚的(MyISAM引擎本身不支持事务)。


需要执行:
alter table [tablename] ENGINE=INNODB


指定为INNODB引擎才能支持事务管理。


更新完之后再执行程序,一切恢复正常了。


在这里记录一下,希望对看到的人有帮助。