当前使用版本(必填,否则不予处理)

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变量。 MyBatis-Plus updateById莫名其妙多修改了一个属性

因此在

@Override
  public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {

这里的parameter变成了

tags=null, description=,

MyBatis-Plus updateById莫名其妙多修改了一个属性