為什么加了@Transactional注解,事務沒有回滾?


在昨天的《事務管理入門》一文發布之后,有讀者聯系說根據文章嘗試,加了@Transactional注解之后,事務並沒有回滾。經過一頓溝通排查之后,找到了原因,在此記錄一下,給后面如果碰到類似問題的童鞋一個參考。

問題原因

在前文的描述中,我漏了一個細節,其實在示例代碼中,與之前拿的基礎例子在配置中有一個關鍵屬性沒有提到,就是下面這個配置:

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

這里的spring.jpa.database-platform配置主要用來設置hibernate使用的方言。這里特地采用了MySQL5InnoDBDialect,主要為了保障在使用Spring Data JPA時候,Hibernate自動創建表的時候使用InnoDB存儲引擎,不然就會以默認存儲引擎MyISAM來建表,而MyISAM存儲引擎是沒有事務的。

所以,如果你的事務沒有生效,那么可以看看創建的表,是不是使用了MyISAM存儲引擎,如果是的話,那就是這個原因了!

本文首發:為什么加了@Transactional注解,事務沒有回滾?,轉載請注明出處。
歡迎關注我的公眾號:程序猿DD,獲得獨家整理的學習資源和日常干貨推送。
如果您對我的其他專題內容感興趣,直達我的個人博客:didispace.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM