当前使用版本 3.3.0
该问题是怎么引起的?
-
com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor#intercept 乐观锁拦截器中将 entity 拆解成一个 hashMap ,存储在 et 字段中 同时将entity实体存储在 map中,其中key = MP_OPTLOCK_ET_ORIGINAL
-
com.baomidou.mybatisplus.core.MybatisDefaultParameterHandler#process 参数handler中,获取的是原始实体 key = MP_OPTLOCK_ET_ORIGINAL updateFill 将 MetaObjectHandler 中的字段存储在 原始实体 entity中,
-
com.baomidou.mybatisplus.core.MybatisDefaultParameterHandler#setParameters 然而,最重要的,在设置sql参数时,使用的参数却是从hashmap中获取, 没有获取到原始实体 entity 中的信息,导致设置在 MetaObjectHandler.updateFill () 中的字段不生效
重现步骤
- 开启乐观锁拦截器(OptimisticLockerInterceptor)
- 构造PO ,设置了 id, version(乐观锁字段),及一些需要更新的字段
- 使用dao中的updateById(T entity) 保存信息 =====》》》无法保存:自定义 MetaObjectHandler 中 updateFill 设置的字段
报错信息
无明显报错信息,除非updateFill中的数据库字段属性是 not null,并且构造PO 时,没有设置这个值
Comment From: miemieYaho
3.3.1.7-SNAPSHOT
Comment From: shanhestm
3.3.1.7-SNAPSHOT什么时候发布