You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot集成Hibernate时UpdateTimestamp注解引发HHH000502警告如何解决?

解决Hibernate HHH000502警告的方案

问题原因

你用@UpdateTimestamp(source = SourceType.DB)标记的receivedOn字段由数据库负责更新,但Kotlin的val修饰符让该属性不可变。Hibernate在实体更新后,会尝试同步数据库返回的最新时间值到实体,但发现属性不可修改,因此抛出该警告。

具体解决办法

方案一:修改字段为var并限制外部修改

将val改为var,同时通过private set禁止外部代码修改该字段,只允许Hibernate通过反射更新。另外添加updatable = false告诉Hibernate不要将该字段纳入UPDATE语句(因为由数据库维护):

@field:[Column(name = "receivedOn", columnDefinition = "timestamptz", updatable = false) 
        UpdateTimestamp(source = SourceType.DB)]
var receivedOn: OffsetDateTime? = null
    private set

方案二:标记字段为只读(Hibernate 6+支持)

Spring Boot 3.x默认配套Hibernate 6.x,可使用@ReadOnly注解标记该字段,明确告知Hibernate该字段仅从数据库读取,不需要应用程序更新:

@field:[Column(name = "receivedOn", columnDefinition = "timestamptz") 
        UpdateTimestamp(source = SourceType.DB)
        ReadOnly]
val receivedOn: OffsetDateTime? = null

方案三:关闭特定警告(临时方案)

如果不想修改实体代码,可通过日志配置关闭该警告。在application.properties中添加:

# 关闭HHH000502所属的日志输出
logging.level.org.hibernate.event.internal.DefaultFlushEntityEventListener=ERROR

内容的提问来源于stack exchange,提问作者ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:05:04