当前使用版本
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也不算。但是使用中确实可能出现事务失效问题