Spring 事务回滚问题。使用NESTED或REQUIRES_NEW外层的事务也回滚了

IAM_YXQ 2015-10-17 02:23:54
我用的是注解事务,具体问题如下:

@Transactional(propagation=Propagation.REQUIRED)
public void A(){
B();
C(); //如果执行失败,要求C回滚,B不回滚
}

@Transactional(propagation=Propagation.MANDATORY)
public void B(){
数据库操作1;
数据库操作2;
}

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void C(){
数据库操作1;
数据库操作2;
}
为什么C执行失败,会同时将B回滚了?不解?C方法换成NESTED也不好用
...全文
842 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvbinibnsb 2019-01-11
  • 打赏
  • 举报
回复
首先,同一个类调用自身方法,this是不被Spring事务增强的,解决方案: https://www.cnblogs.com/lvbinbin2yujie/p/10251787.html 第二点,那就把C抛出的异常在A方法try-catch住,应该可以不会滚B方法了吧.不然C抛异常给A,A就会回滚 ;
那年花 2017-01-10
  • 打赏
  • 举报
回复
浮云若水 2017-01-09
  • 打赏
  • 举报
回复
楼上也有说到 因为你在A上加了事物 bc中执行了数据库操作 不管那个函数出错 都会回滚所有操作
浮云若水 2017-01-09
  • 打赏
  • 举报
回复
A中 调用bc 其中一个有问题 abc全部回滚
qq_27904393 2017-01-09
  • 打赏
  • 举报
回复
我也遇到了同样的问题,请问是什么原因呢?
奶瓶居士 2016-10-11
  • 打赏
  • 举报
回复
把C给catch掉应该就行了。
tony4geek 2015-10-17
  • 打赏
  • 举报
回复
结账结账。-
  • 打赏
  • 举报
回复
因为你标注的事物控制在A方法上,A方法调用B.C ,只要其中一个除了问题,所有操作都要回滚的
现在ing 2015-10-17
  • 打赏
  • 举报
回复
引用 2 楼 IAM_YXQ 的回复:
我知道了!结账
IAM_YXQ 2015-10-17
  • 打赏
  • 举报
回复
我知道了!结账
IAM_YXQ 2015-10-17
  • 打赏
  • 举报
回复
在线求解!在线求解!在线求解!在线求解!在线求解!在线求解!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧