@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住了

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