爲什麼加了@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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章