各位大佬们,小白请教一下,这段代码还会执行事务吗?用的 MybatisPlus,缩略代码如下
@Repository
public class xxxRepository extends ServiceImpl
@Resource
private TransactionTemplate transactionTemplate;
public boolean saveOrUpdate(xxxx) {
List<xxxDO> insertList = new ArrayList<>();
List<xxxDO> updateList = new ArrayList<>();
transactionTemplate.execute((status) -> {
this.saveBatch(insertList);
this.updateBatchById(updateList);
return Boolean.TRUE;
});
return Boolean.TRUE;
}
}
这段代码中 saveBatch 和 updateBatchById 是 mybatisplus 的方法,用的 @Transactional(rollbackFor = Exception.class)注解修饰,在继承的情况下,@Transactional 拥有事务的能力是因为 spring aop 生成代理了对象,这种方法直接调用了 this 对象的方法不会生成事务
但是,在此之外我还用了编程式事务包住了他们,这个编程式事务会生效吗?
麻烦各位大佬了
1
milesians 2023-07-07 17:51:50 +08:00
试一试不就可以了?
|
2
antipro 2023-07-07 19:03:56 +08:00 via Android
我猜应该会生效,毕竟外部已经有事务开始了,内部调用方法不会有任何改变,否则,我们是不是都不能在事务方法里调用自己的私有方法了?
|
3
ttoh 2023-07-07 19:53:06 +08:00 via iPhone
目测会生效。验证的话,可以把 org.springframework.transaction.interceptor 这个包的日志级别设成 trace ,就可以看到 spring 每个事物打开和关闭的日志了。
|
4
vishun 2023-07-08 08:25:31 +08:00
感觉不生效,这就是同一类内部调用啊,不走 aop 怎么会生效呢?
|