有讀者聯系說根據文章嘗試,加了<code>@Transactional</code>注解之後,事務并沒有復原。經過一頓溝通排查之後,找到了原因,在此記錄一下,給後面如果碰到類似問題的童鞋一個參考。
在前文的描述中,我漏了一個細節,其實在示例代碼中,與之前拿的基礎例子在配置中有一個關鍵屬性沒有提到,就是下面這個配置:
這裡的<code>spring.jpa.database-platform</code>配置主要用來設定hibernate使用的方言。這裡特地采用了<code>MySQL5InnoDBDialect</code>,主要為了保障在使用Spring Data JPA時候,Hibernate自動建立表的時候使用InnoDB存儲引擎,不然就會以預設存儲引擎MyISAM來建表,而MyISAM存儲引擎是沒有事務的。
是以,如果你的事務沒有生效,那麼可以看看建立的表,是不是使用了MyISAM存儲引擎,如果是的話,那就是這個原因了!
除此之外,對于事務沒有生效的可能還很多,比如,在同一個類中定義又調用等。這裡就不具體展開了,歡迎讀者留言分享你碰到的事務失效的情況!
