关于 springboot+mybatis 的事务管理问题

2020-09-15 10:28:07 +08:00
 jiobanma

对事务不熟悉一直没有用过,所以问题可能会比较 rz !! 如果我在一个 controller 中有一个方法,要去删除数据流程是:先调用关联表的 service 去删除关联变的数据, 然后再去调用主表的 service 删除主表的数据。这两个删除方法存在于不同的 service 接口中。这个时候我该如何做到在这个流程中如果某一个删除出现问题,让该流程中改变的数据进行回滚?(在不改变 service 结构的情况下)

2037 次点击
所在节点    Java
10 条回复
dovme
2020-09-15 10:54:54 +08:00
方法上加 @Transactional 注解
KevinBlandy
2020-09-15 11:02:09 +08:00
互相调用的各个 Service 方法都添加 @Transactional 注解。
colincat
2020-09-15 11:06:42 +08:00
抽离出来一个单独 service 添加 @Transactional
git00ll
2020-09-15 11:07:15 +08:00
两个 service 的方法上都加上事务注解,默认是 REQUIRED,调用的第二个 service 会共享第一个 service 的事务,即使用同一条 jdbc 连接。
jiobanma
2020-09-15 11:22:07 +08:00
@colincat #3 目前不能更改 service 的结构
@KevinBlandy #2 不是互相调用,是同步调用两个 service
colincat
2020-09-15 11:31:48 +08:00
@jiobanma 单独提取出来一个 component,因为 spring 事务是基于代理实现的,了解一下底层更加有助于编码
1107139144
2020-09-15 17:20:28 +08:00
把两个 service 里的方法整合在一个 service 。只 controller 里面调用一个 service
jiobanma
2020-09-15 17:58:01 +08:00
@1107139144 #7 这个 service 结构目前不能变动,不过按照附言里的方式手动回滚和提交事务已经实现了
chen19
2020-09-16 09:27:30 +08:00
两个 Service 方法都添加 @Transactional 注解,应该就可以了
sdrzlyz
2020-09-16 10:25:25 +08:00
serviceA 直接调用 serviceB 的话,两者不会在同一个事务里。

如果是 spring 的话,serviceA 先 getBean(ServiceB),然后再调用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/707075

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX