当前使用版本(必填,否则不予处理)
3.5.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
最新版3.5.2在调用updateById的时候莫名其妙多修改了一个属性,明明没有设置那个属性的值。
重现步骤(如果有就写完整)
ResourceCard resourceCardUpdate = new ResourceCard();
resourceCardUpdate.setId(id);
resourceCardUpdate.setViewCount(resourceCard.getViewCount()+1);
resourceCardMapper.updateById(resourceCardUpdate);
报错信息
打印的SQL日志为:
UPDATE jzwh_resource_card SET description=?, view_count=? WHERE id=?
(String), 58(Integer), 7(Long)
莫名其妙把description属性给修改了,并且我DO里面还有一个tags属性和description类型一模一样则没有被修改。
Comment From: miemieYaho
你的description不是空串吗?指定的update的FieldStrategy是啥?
Comment From: Skqing
你的description不是空串吗?指定的update的FieldStrategy是啥?
description属性是null不是空字符串
/**
* 标签
*/
private String tags;
/**
* 描述
*/
private String description;
FieldStrategy的update没有做配置
@Override
public void updateFill(MetaObject metaObject) {
// 修改时间
// this.strictInsertFill(metaObject, "updateTime", Date.class, null);
}
Comment From: miemieYaho
从你的给出的sql打印日志来看,它就是有值的而且是个空串
Comment From: Skqing
问题是我根本没有设置这个值啊
ResourceCard resourceCardUpdate = new ResourceCard();
resourceCardUpdate.setId(id);
resourceCardUpdate.setViewCount(resourceCard.getViewCount()+1);
resourceCardMapper.updateById(resourceCardUpdate);
我即便是把description设置为null打印的SQL也是一样的
ResourceCard resourceCardUpdate = new ResourceCard();
resourceCardUpdate.setId(id);
resourceCardUpdate.setViewCount(resourceCard.getViewCount()+1);
resourceCardUpdate.setDescription(null);
resourceCardMapper.updateById(resourceCardUpdate);
对应上面的语句打印的SQL:
- ==> Preparing: UPDATE card SET description=?, view_count=? WHERE id=?
- ==> Parameters: (String), 61(Integer), 7(Long)
- <== Updates: 1
Comment From: miemieYaho
能给出复现demo吗
Comment From: Skqing
能给出复现demo吗
好,我要单独把这段摘出来
Comment From: Skqing
今天无意中发现了问题,可能不是mybatis plus的bug,调试的时候相同的DO在下面显示的值和鼠标悬停显示的值竟然不一样,莫名其妙啊,如图这是共同一个DO变量。
因此在
@Override
public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
这里的parameter变成了
tags=null, description=,