今天在項目中調試代碼的時候,方法中報錯,當去數據庫中查看該方法操作的那條數據記錄時,發現數據已經被修改了。但是該方法整體是處在@Transactional事物管理之下的,也就是說,發生異常時,事物沒有回滾。
經過查找原因,發現是Mysql表類型問題。Mysql表類型分爲InnoDB和MyISAM,二者有本質上的區別。具體區別請鏈接到http://www.cnblogs.com/xiohao/p/3633418.html
確實,我通過JPA自動創建出來的表,是MyISAM型的,修改表類型,問題解決。但是根本原因在於JPA自動創建表時,表類型爲什麼會是MyISAM非事物型。
在我的項目裏,yml配置文件中,設置了hibernate方言爲MySQL5Dialect,後來將配置改爲 MySQL5InnoDBDialect,生成的表類型就變成了InnoDB型。數據庫版本:Mysql5.7 , hibernate :hibernate-core-5.2.14