MyBatis-Plus saveOrUpdate 应该执行更新,却执行插入,

ServiceImpl.saveOrUpdate(); 重要的是:只是偶尔会出现 版本:3.2.0

Comment From: Liaomessi

请提供重现案例

Comment From: murphy-opensource

我也遇到相同问题了,其中一种可稳定复现场景如下: 目标Entity存在@TableLogic注解,且存在指定主键的已逻辑删除数据; 此时运行saveOrUpdate()方法,根据内部逻辑,会去先调用selectById进行查询,而该查询搜索不到已逻辑删除的数据; 因为selectById查不到,导致saveOrUpdate判断应当save,并使用该指定主键进行save,导致数据库重复主键报错。

建议对 判断逻辑 及 报错提示内容 进行优化: 使用不拼接逻辑删除的id查询进行查询,并在查到已逻辑删除的数据时,报错提示一个更容易理解的错误原因,如:“该主键 已存在逻辑删除数据!”

Comment From: newgo

MyBatis-Plus saveOrUpdate 应该执行更新,却执行插入, 我也遇见了相同的问题 com.baomidou mybatis-plus-boot-starter 3.0.6

Comment From: yqbo00

俺也一样碰到了这个问题。然后重写selectById方法,发下可以判断当前数据存在,但是在做update操作的时候又带上了逻辑删除字段判断,导致update不成功。然后就更改了业务写法曲线救国了

Comment From: yqbo00

建议修复为可以对已逻辑删除的数据进行变更为有效。当前的场景更多的是对旧数据的重复使用,避免表里重复脏数据过多。