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

3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

重现步骤(如果有就写完整)

使用IService中的update(Wrapper updateWrapper) 方法进行更新操作。

this.update(Wrappers.<User>lambdaUpdate().eq(User::getId, id).set(User::getAge, age));

自动填充功能会失效。

    private static void process(MappedStatement ms, Object parameterObject) {
        if (parameterObject != null) {
            TableInfo tableInfo = null;
            Object entity = parameterObject;
            if (parameterObject instanceof Map) {
                Map<?, ?> map = (Map<?, ?>) parameterObject;
                if (map.containsKey(Constants.ENTITY)) {
                    Object et = map.get(Constants.ENTITY);
                    if (et != null) {
                        entity = et;
                        tableInfo = TableInfoHelper.getTableInfo(entity.getClass());
                    }
                }
            } else {
                tableInfo = TableInfoHelper.getTableInfo(parameterObject.getClass());
            }
            // 跟踪断点,发现tableInfo ==null,没有执行以下代码
            if (tableInfo != null) {
                //到这里就应该转换到实体参数对象了,因为填充和ID处理都是争对实体对象处理的,不用传递原参数对象下去.
                MetaObject metaObject = ms.getConfiguration().newMetaObject(entity);
                if (SqlCommandType.INSERT == ms.getSqlCommandType()) {
                    populateKeys(tableInfo, metaObject, entity);
                    insertFill(metaObject, tableInfo);
                } else {
                    updateFill(metaObject, tableInfo);
                }
            }
        }
    }

跟踪断点,发现tableInfo ==null,没有执行填充代码。

parameterObject 参数中et为null,应该操作ew进行赋值。

报错信息

无报错信息,自动填充不生效。

Comment From: miemieYaho

只能填充到第一个入参

Comment From: hieastz

只能填充到第一个入参

@miemieYaho 你的意思使用 update(T entity, Wrapper updateWrapper)?

那提供 IService.update(Wrapper updateWrapper) 就是允许存在缺陷喽。