前几天发现程序有个Bug:使用JPA已经设置了回滚,但抛出异常后,提交的事务并没有回滚。
刚开始以为是JPA使用问题,debug了近2个多小时竟然找不到原因。
后来上网查了一下,才发现不是程序问题(坑爹啊,看来自己对mysql还是不熟),是数据库表问题(JPA自动建表)。
原因如下:
mysql建表时如果指定ENGINE=MyISAM,事务是无法回滚的(MyISAM引擎本身不支持事务)。
需要执行:
alter table [tablename] ENGINE=INNODB
指定为INNODB引擎才能支持事务管理。
更新完之后再执行程序,一切恢复正常了。
在这里记录一下,希望对看到的人有帮助。