当前使用版本(必填,否则不予处理)
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 字段一个值
了解了,感谢解答。