@transactional无效是怎么回事?transactional不生效是为什么?

相信大家都有碰到过@transactional无效的情况,那么这究竟是什么原因造成的呢?下面一起来了解一下失效的原因吧。

一个,因为AOP的特性,在使用@Transactional的时候不可以在本类里面调用,否则的话就会出现事务失效。

在进行一次失败的请求的时候,在数据库当中看到数据被成功的写进数据库,所以借此可以判断出,注解失效。

二个,@Transactional注解只可以应用到public可见度的方法上。

假如在protected、private或者是package-visible的方法上使用@Transactional注解,它也不会报错, 可是,这个被注解的方法将不会展示已配置的事务设置。

除了以上的两种情况之外,还有下面几种情况是@Transactional无效的原因:

1、抛出的异常一定要是Unchecked Exception:例如,运行时异常(RuntimeException);

2、checked Exception需要注解这样写@Transactional(rollbackFor = Exception.class);

3、service层的方法里用加事务最好不要用try catch,假如,将那个异常抛出的那这个事务注解也是会无效的,或者是catch里要加

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

除此之外,还要注意了,有些问题不一定出现在代码上面,建议去看一下源头。

以上就是对于@transactional出现无效原因的一些总结了,你有碰到过@transactional无效的情况吗?你又是如何去解决的呢?

以上内容源于网络,希望可以对大家起到参考作用。

更多相关内容,请继续通过奇Q工具网的java架构师栏目来进行了解和学习吧。

除此之外,本站还有更多的java项目中常见问题以及解决方法可以为你分享哦,希望对你的java学习之路可以有所帮助。

推荐阅读:

@transactional注解的作用是什么?作用详解

@transactional回滚,@Transactional spring事务回滚相关详解

@transactional的使用详解