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的
今天中午群里已经有人说过了 经过多方测试 并没有复现这个问题 不清楚你们是如何出现的 请提供能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发现这个方法貌似不支持全量修改,如果只是改了性别,不改邮箱,还是会报邮箱已存在,我还没抽时间调试
登录 后才可以发表评论