@TableField(fill = FieldFill.UPDATE)
常规来说这个注解是加到我的update要自动更新的属性上的。
例如:
@ApiModelProperty(value="修改人")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateBy;
@ApiModelProperty(value="修改时间")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
updatetime加上这个字段的目的是希望在更新的时候,自动填充更新时间.
坑:
需求场景:在分页查询之后,修改字段“已阅人”,这个字段我是查看人工号用逗号拼接的一个字符串,目的是为了统计这条数据被哪些人看过。
做法:在查询之后进行 update这个字段操作(我这里是批量更新)
坑来了:
首先我返回的列表数据的所有元素,每个元素的updatetime在数据库中都有值,不是空。
返回的这个rePage对象里面的列表数据时,集合中的所有元素的 updateTime的值都变成了最新的这个值。我去查看数据库,此刻数据库的值并没有都改成一样,也就是说我的查询结果跟数据库实际值不一致了。无任何缓存操作。过一会 ,重复刷新几次查询接口又变的正常了,一致了。这个过程中,没有任何其它人操作。
我把updatetime 字段上的@TableField(fill = FieldFill.UPDATE) 删除,updateBy上面的没有删除。仍然不行,还是会出问题。
最终我把Page中泛型对象 Inspection 类里面所有的 @TableField(fill = FieldFill.UPDATE) 都删除,结果正常了,不再出现查询结果与数据库不一致的情况。
原因:暂时未知。
总结:查询之后存在修改操作的场景,查询表对应的实体类中,所有属性的 @TableField(fill = FieldFill.UPDATE) 都删除,避免出现bug;
终极大招:不用 @TableField(fill = FieldFill.UPDATE) 。