@Transactional註解失效

1、檢查方法是不是public的 (只能應用到 public 可見度的方法)

2、異常類型是不是unchecked異常 

註解會對unchecked異常進行事務回滾;如果是checked異常則不回滾。 

java裏面將派生於Error或者RuntimeException(比如空指針,1/0)的異常稱爲unchecked異常;

其他繼承自java.lang.Exception得異常統稱爲Checked Exception,如IOException、TimeoutException等

- Checked exception: 繼承自 Exception 類是 checked exception。代碼需要處理 API 拋出的 checked exception,要麼用 catch 語句,要麼直接用 throws 語句拋出去。

- Unchecked exception: 也稱 RuntimeException,它也是繼承自 Exception。但所有 RuntimeException 的子類都有個特點,就是代碼不需要處理它們的異常也能通過編譯,所以它們稱作 unchecked exception。RuntimeException(運行時異常)不需要try...catch...或throws 機制去處理的異常。


如果想check異常也想回滾怎麼辦,註解上面寫明異常類型即可

@Transactional(rollbackFor=Exception.class) 

 

類似的還有norollbackFor,自定義不回滾的異常

3、數據庫引擎要支持事務,如果是MySQL,注意表要使用支持事務的引擎,比如innodb,如果是myisam,事務不起作用

4、是否開啓了對註解的解析

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

5、spring是否掃描到你這個包,如下是掃描到org.test下面的包

<context:component-scan base-package="org.test" ></context:component-scan>

6、檢查是不是同一個類中的方法調用(如a方法調用同一個類中的b方法) 
7、異常是不是被你catch住了

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