EAS_在controllerBean中调用其他方法,发生异常后,事务没有回滚

发布时间 2023-07-28 16:58:21作者: 凉了记忆

首先列出例子如下:在一个方法中,执行了多个逻辑,第一部分是调用退票逻辑,第二部分是执行其他业务,这里我们遇到问题,退票逻辑执行成功,但是后面的代码异常,这时我们需要的是退回所有执行,

这时我们就需要认清facade中的事务属性:

 

就是EJB规范的6种事务属性:
Required: 要求有事务: 如果已有事务,则在当前事务中进行;如果没有,就新建事务;
RequiredNew: 要求有事务: 不管原来有没有事务,都新建事务,在新事务环境中执行。
Mandatory: 要求有事务:如果原来没有事务,即抛异常。
Supports: 可支持事务:如果原来有事务,就在当前事务中进行;如果没有,就不新建事务,即可在事务环境中进行。
NotSupports: 无事务:如果原来有事务,则先挂起事务,继续在无事务环境中执行; 如果原来没有事务, 则可继续执行。
Never:不支持事务: 如果原来有事务,则抛异常; 如果没有,则可继续执行。

一般标准方法 save,update 等事务属性都设置的required,这里我们如果想实现上面的要求,就可以将这个方法的事务属性也设置为“required”就可以了

 拓展:若果想实现这个退票里面发生了异常,因为在一个for循环里调用的这个方法,我们不想影响下一次循环的执行,我们可以catch这个异常不处理,也可以参考我的另一篇博客:https://www.cnblogs.com/ketoli/p/17124096.html