描述
今天在调试接口过程中,调用updateById接口后,设置的自动田中修改时间和修改人信息在数据库中未更新。
spring-boot版本:2.5.4
mybatis-plus版本:3.4.3.3
实体代码片段
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date modifiedTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String modifiedUser;
重写代码片段
@Override
public void updateFill(MetaObject metaObject) {
strictUpdateFill(metaObject, "modifiedTime", Date.class, new Date());
strictUpdateFill(metaObject, "modifiedUser", String.class, UserUtil.getUser().getUserName());
}
问题原因及解决方案
在更新数据时,如果原有的数据不为null,则使用原数据。如果为null,则自动填充。既然是这样,那么在自动填充前,将两个字段的数据清空是不是就可以了呢?经过实际验证,该方法可行。
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("modifiedTime", null);
metaObject.setValue("modifiedUser", null);
strictUpdateFill(metaObject, "modifiedTime", Date.class, new Date());
strictUpdateFill(metaObject, "modifiedUser", String.class, UserUtil.getUser().getUserName());
}
总结
相比于手动set值以及网上说的重写对应的方法,此种解决方法虽然有点low,但是简单方便。