版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.youkuaiyun.com/zhangleiyes123/article/details/83143957
抽时间赶紧总结一波:最近遇到了关于事务的问题,一个小接口浪费了半天时间才解决,最后才发现是事务的原因,今天就特地把事务的问题分享给大家;
在此先向各位大神请教一个问题?
(1). @Transactional(rollbackOn = Exception.class) //import javax.transaction.Transactional;
(2). @Transactional(rollbackFor=Exception.class) //import org.springframework.transaction.annotation.Transactional;
这两个包下的事务有啥区别?都分别适用于什么场合?
*************************************************************************************************************************************************
*************************************************************************************************************************************************
一:
好了,言归正传,首先,我们都知道这种设置是因为Spring的默认回滚(运行时异常RuntimeException),如果想要回滚编译时异常Exception时,要设置@Transactional(rollbackFor = Exception.class),而且Exception还要抛出,抛出异常,就会回滚,数据库里面的数据也会回滚。
二:
事务可以写在类上,可以写在某个方法上,也可以写在某个大方法的具体的某个小方法上;
类中:
类中的某个大方法:
dao层中:
总结:1、类中全是查询方法,可以写在类中,代表整个类都加了事务(貌似查询又不需要事务哦,嘿嘿,这条略过!);
2、若是类中有修改、删除、添加方法,不要写在类中,写在大方法上/大方法的小方法上,个人觉得最好还是写在大方法的小方法上,即就是那块需要加那块,否则出错了找半天,因为你不会轻易想到是事务这块的问题;
3、代码中只要是关于修改、删除、添加等方法,只要不保存,最后数据库中就不会保存,但是加了事务,即使你没有保存,数据库中也会替你保存(这块慎重,不想保存入库的千万不要在类/大方法上添加事务,否则。。。。。。)。
4.https://blog.youkuaiyun.com/xp_lx1/article/details/82688338
参考网址
同一个类中某个方法A调用另外一个方法B,A方法中声明了事务,B中没有声明,则就只有一个事物,无论那个方法报错了,
都会回滚;如果A,B中都声明事务,但是A,B是在同一个类中,则被调用的方法B的事务不起作用,即还是只有一个事物;
如果A,B中都声明了事务,并且A,B是不同类中,则是两个事物,就是说A中报错回滚了,B中如果没有报错,则不影响B,
B还是OK的!