878 Star 10K Fork 5.5K

dromara / RuoYi-Vue-Plus

 / 详情

[Bug]: 升级mp3.5.7之后insertOrUpdate方法调用出现栈溢出

已完成
创建于  
2024-06-17 16:46

版本

jdk版本(带上尾号): 例如 21
框架版本(项目启动时输出的版本号): dev
其他依赖版本(你觉得有必要的): mp3.5.7

功能不好用不会用是否已经看过项目文档?

这个问题是否已经存在?

希望结果

能够正常调用baseMapper.insertOrUpdate

相关代码与报错信息(请勿发混乱格式)

随便把一个项目中的update或者insert方法改成insertOrUpdate,发生报错

jakarta.servlet.ServletException: Handler dispatch failed: java.lang.StackOverflowError
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
Caused by: java.lang.StackOverflowError: null
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1050)
	at java.base/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1036)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxyFactory.newInstance(MybatisMapperProxyFactory.java:47)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxyFactory.newInstance(MybatisMapperProxyFactory.java:52)
	at com.baomidou.mybatisplus.core.MybatisMapperRegistry.getMapper(MybatisMapperRegistry.java:57)
	at com.baomidou.mybatisplus.core.MybatisConfiguration.getMapper(MybatisConfiguration.java:191)
	at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.getMapper(SqlHelper.java:323)
	at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.execute(SqlHelper.java:339)
	at com.baomidou.mybatisplus.extension.toolkit.Db.saveOrUpdate(Db.java:230)

不确定是MP的问题还是plus最新改的aop proxy问题导致的,有时间的先看看,昨天的版本3.5.6和aop proxy没改之前是OK的

评论 (6)

DoubleH 创建了任务
DoubleH 添加了
 
bug
标签
DoubleH 修改了描述
展开全部操作日志

今天中午群里已经有人说过了 经过多方测试 并没有复现这个问题 不清楚你们是如何出现的 请提供能100%复现的例子

输入图片说明

输入图片说明
输入图片说明
请提供确切有效的复现方案

plus的代码很少用到insertOrUpdate,我个人新加的模块用到,使用的时候发现的,后面就试着把system模块的用户修改代码
int flag = baseMapper.updateById(sysUser);
改成
boolean result = baseMapper.insertOrUpdate(sysUser);
发现还是有栈溢出的问题,你可以试试把这里改成insertOrUpdate看看,如果还是没问题那估计是我哪里改动导致出错了

    @Override
    @CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId")
    @Transactional(rollbackFor = Exception.class)
    public int updateUser(SysUserBo user) {
        // 新增用户与角色管理
        insertUserRole(user, true);
        // 新增用户与岗位管理
        insertUserPost(user, true);
        SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class);
        // 防止错误更新后导致的数据误删除
        int flag = baseMapper.updateById(sysUser);   //这里改成insertOrUpdate看看,
        if (flag < 1) {
            throw new ServiceException("修改用户" + user.getUserName() + "信息失败");
        }
        return flag;
    }

ps调用这个方法的controller发现这个方法貌似不支持全量修改,如果只是改了性别,不改邮箱,还是会报邮箱已存在,我还没抽时间调试

我这并不能复现这个问题 不过其他人找到了解决方案 mp3.5.7新增了一个insertOrUpdate 而我们本身也自带了一个
经测试 删除plus自带的 用mp新增加的 可以解决这个问题

已经将多余方法删除 可尝试是否还有问题

删除之后没问题了

疯狂的狮子Li 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1766278 javalionli 1585201115
Java
1
https://gitee.com/dromara/RuoYi-Vue-Plus.git
git@gitee.com:dromara/RuoYi-Vue-Plus.git
dromara
RuoYi-Vue-Plus
RuoYi-Vue-Plus

搜索帮助

344bd9b3 5694891 D2dac590 5694891