在常規使用@transactional注解時,如果碰到不生效問題,要首先想到如下幾個問題:
1. 如果是有關數據庫操作,首先要查看牽涉到的表使用的引擎是什么引擎,要知道使用"MYISAM"數據庫引擎是不支持事務回滾操作的,需要使用"InnoDB數據引擎".
2. 查看方法是否是public方法,如果方法是private方法,也是不支持事務的.
3. 如果事務回滾失敗還要查看出現的異常是checked異常還是unchecked異常.checked異常會回滾,unchecked異常也是不會執行回滾操作的,如果需要指定異常的回滾級別,可以使用@transactional(rollcbackFor="Exception.class")