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

3.5.3.2

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

使用userService.lambdaUpdate().set(FcUser::getRemarks, "after").eq(FcUser::getId, userId).update();更新时,数据库updateTime字段仍旧是之前的时间

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

1、TimeMetaObjectHandler.java

@Component
public class TimeMetaObjectHandler implements MetaObjectHandler {
    // ...
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

2、FcUser.java

@Data
@TableName(value = "fc_user")
public class FcUser implements Serializable {

    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    @TableField(value = "remarks")
    private String remarks;

    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;
}

3、测试部分代码

long userId = 1689919551567032322L;
FcUser user = userService.getById(userId);
log.info("Before Update ===> userID: {}, remarks: {}, updateTime: {}", user.getId(), user.getRemarks(), user.getUpdateTime());
boolean update = userService.lambdaUpdate().set(FcUser::getRemarks, "after").eq(FcUser::getId, userId).update();
if (update) {
    user = userService.getById(userId);
    log.info("After Update ===> userID: {}, remarks: {}, updateTime: {}", user.getId(), user.getRemarks(), user.getUpdateTime());
}

4、执行结果

2023-08-28T16:04:47.779+08:00  INFO 1000 --- [           main] TestUnits                                : Before Update ===> userID: 1689919551567032322, remarks: before, updateTime: 2023-08-11T17:17:20
2023-08-28T16:04:47.910+08:00  INFO 1000 --- [           main] TestUnits                                : After Update ===> userID: 1689919551567032322, remarks: after, updateTime: 2023-08-11T17:17:20

报错信息

Comment From: HaroldLoui

这个更新时间无法自动填充其实并不影响整体功能,多加个.set(FcUser::getUpdateTime, LocalDateTime.now())即可。我只是有些不解,照理说我给updateTime增加上自动填充功能后,应该在每次更新的时候都应该去填充才对。还是说这个自动填充只是针对updateById()方法有效?

Comment From: miemieYaho

只针对entity,填充是set javaBean 字段一个值

Comment From: HaroldLoui

只针对entity,填充是set javaBean 字段一个值

了解了,感谢解答。