@TableField(fill = FieldFill.UPDATE) 避坑

@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这个字段操作(我这里是批量更新)


image.png

image.png

坑来了:
首先我返回的列表数据的所有元素,每个元素的updatetime在数据库中都有值,不是空。
返回的这个rePage对象里面的列表数据时,集合中的所有元素的 updateTime的值都变成了最新的这个值。我去查看数据库,此刻数据库的值并没有都改成一样,也就是说我的查询结果跟数据库实际值不一致了。无任何缓存操作。过一会 ,重复刷新几次查询接口又变的正常了,一致了。这个过程中,没有任何其它人操作。

我把updatetime 字段上的@TableField(fill = FieldFill.UPDATE) 删除,updateBy上面的没有删除。仍然不行,还是会出问题。
最终我把Page中泛型对象 Inspection 类里面所有的 @TableField(fill = FieldFill.UPDATE) 都删除,结果正常了,不再出现查询结果与数据库不一致的情况。

原因:暂时未知。

总结:查询之后存在修改操作的场景,查询表对应的实体类中,所有属性的 @TableField(fill = FieldFill.UPDATE) 都删除,避免出现bug;

终极大招:不用 @TableField(fill = FieldFill.UPDATE) 。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容