当前使用版本

3.5.1

该问题是如何引起的?

例如:UserService 继承 ServiceImpl<> 之后,在UserService中的 @Transactional a() 方法中调用 saveBatch() 那么相当于 super.saveBatch() 并不是spring aop代理的bean,那么事务便会失效。

基于以上,不太理解 ServiceImpl 为什么这样设计。

重现步骤

@Component
public class WorkOrderInfoMaintenanceItemLinkService extends ServiceImpl<WorkOrderInfoMaintenanceItemLinkMapper, WorkOrderInfoMaintenanceItemLink> {
...

    @Transactional(rollbackFor = Throwable.class)
    public void createBindOrder(List<String> maintenanceItemIds) {
        List<EamMaintainTerm> eamMaintainTerms = iEamMaintainTermService.listByIds(maintenanceItemIds);
        boolean result = saveBatch(eamMaintainTerms);
...
    }

com.baomidou.mybatisplus.extension.service#IService

    @Transactional(rollbackFor = Exception.class)
    default boolean saveBatch(Collection<T> entityList) {
        return saveBatch(entityList, DEFAULT_BATCH_SIZE);
    }

报错信息

Comment From: totoro52

“在UserService中的 @transactional a() 方法中调用 saveBatch() ”, 就算不在plus这样调,在spring这么干也会事务失效,本身spring 的注解事务就不支持这么做, 可以去查阅相关的@transactional 文档,如果你想让事务生效,可以注入自身在调用自身。

Comment From: JamesSmith888

“在UserService中的 @transactional a() 方法中调用 saveBatch() ”, 就算不在plus这样调,在spring这么干也会事务失效,本身spring 的注解事务就不支持这么做, 可以去查阅相关的@transactional 文档,如果你想让事务生效,可以注入自身在调用自身。

是的,这个说是个bug也不算。但是使用中确实可能出现事务失效问题