同个 service 下方法互相调用时的事务疑惑, A 下的 a 方法没有事务,但是 b 方法有事务,请问如何在 a 方法调用 b 方法的时候不开启事务
2019-11-23 09:49:17 +08:00
running17
a 方法中需要先对数据进行删除后调用 b 方法重新写入数据,删除和新增的数据的 project_id 字段值相同,且删除时是根据该字段来的,在同个事务下的话现在是会导致新增的数据会被直接删除掉,虽然 console 打印出来 delete 是先执行了后再执行的 insert 的。然后把 b 方法的代码复制到 a 中直接执行就没有问题,看了 console 的打印的日志,区别就是 a 调 b 时开启了事务,而单 a 执行时没有事务,有点疑惑,恳请大佬们解疑,然后是否可以在 a 调用 b 时不开启事务?
@zjsxwc 是这样的,先执行了 delete from xx where project_id = 'aaaa', 后执行了 insert insert xx (project_id, name) values ('aaaa', 'bbbb') 因为开启了事务,后面执行的 name 为'bbbb'执行成功了,但数据库中没有找到记录 没有事务的情况下能找到
cxshun
2019-11-23 10:08:44 +08:00
看样子楼主你用的应该 spring 的事务管理,如果是的话,A 的 a 方法没有事务,而同一个类 A 下的 b 方法有事务,这时调用 a 不会开启事务的。因为 a 并没有被代理。
如果确实出现你说的情况,看一下是不是这个 A 类被注解为事务了,导致了整个类都要求用事务
running17
2019-11-23 10:11:04 +08:00
@cxshun b 方法上是注解了 @Transactional( rollbackFor = {Exception.class}), a 方法上没有注解,A 类上也没有注解,b 方法是 A 类从 B 类继承过来的