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

升级Hibernate至6.2+版本后遇版本值未初始化错误求助

Hibernate 6.2+升级后出现"Detached entity with generated id '1' has an uninitialized version value 'null'"错误

问题描述

将项目Hibernate版本升级至6.2.0.Final、6.3.0.Final、6.4.0.Final或6.4.3.Final时,触发错误:

Detached entity with generated id '1' has an uninitialized version value 'null'. com.VERSION

使用6.1.7.Final版本时无此问题。

项目pom.xml依赖配置

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>10.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>jakarta.faces</artifactId>
   <version>4.0.5</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>6.4.3.Final</version>
   <optional>true</optional>
</dependency>

排查与解决方案

1. 修复实体类版本字段初始化

Hibernate 6.2+对乐观锁版本字段的检查逻辑更严格,要求版本字段不能为null。在带@Version注解的实体字段上直接设置默认值:

@Version
private Integer version = 0; // 对应类型设合适初始值,比如Long类型设为0L

确保实体无论是从数据库加载还是手动创建,版本字段都不会处于未初始化状态。

2. 修正实体分离后的操作逻辑

如果是在实体脱离持久化上下文(比如调用session.detach()或Session关闭后)执行更新操作,要确保分离前版本字段已经被完整加载。避免手动设置实体id后,直接将其当作已持久化实体操作却忽略版本字段的初始化。

3. 临时兼容配置(不推荐长期使用)

若需要快速验证问题来源,可以添加Hibernate配置参数放宽版本字段检查:

hibernate.jpa.compliance.version.nullable = true

此配置允许版本字段为null,但仅作为临时排查手段,最终还是建议从实体层面修复初始化问题。

4. 检查依赖冲突

确认项目中是否存在其他与JPA/Hibernate相关的依赖(比如第三方扩展、ORM工具),尝试移除非必要依赖,排查是否存在版本兼容性冲突。

内容的提问来源于stack exchange,提问作者Ömer Faruk Kurt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:48