1. 程式人生 > >@Transactional 無效原因

@Transactional 無效原因

pre 網上 nal 出現 image 沒有 imp 有用 調用

在controller 上面使用 @Transactional 註解時候發現數據沒有回滾,在執行完update 更新語句,事務直接就commit 了,

此時方法尚未執行結束,數據庫數據已經更新了。

技術分享圖片

第一反應應該是配置文件有問題,自己檢查了spring.xml 和spring-mvc.xml文件,配置文件沒什麽問題。

在pring.mvc中 <tx:annotation-driven transaction-manager="transactionManager" /> 也是有的

並且自動掃描了 service 層文件。百思不得其解

網上查詢資料:導致該註解無效的原理多種多樣,沒有一種和我的是一樣的。

有的說spring.xml和spring-mvc.xml 兩個配置文件都對controller 或者 service 層進行了掃描,出現掃描重復,這種情況會導致

@Transactional 註解無效,但我的不屬於這種情況,

還有的說,在同一個類中 ,一個沒有配置@Transactiona 註解的方法,調用了令一個配置了@Transactiona 註解的方法,導致該註解無效。

我的也不屬於這種情況。

還有的說,方法修飾符沒有用public。。

這些都會導致該註解無效,但是我的不屬於這些情況。

偶然嘗試,在sevice 層接口實現類上面,配置了 @Transactional debug 調試發現,數據回滾了,註解起作用了。

原來這個註解需要用在service 接口實現類 impl 中。

後來查資料:

若要@Transactional 註解配置了controller 層,需要將開啟事務註解方式的 方式即:<tx:annotation-driven transaction-manager="transactionManager" /> 增加在spring-mvc.xml中

嘗試了一下,有效。

@Transactional 無效原因