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

Spring Data JPA中数据库自动生成UUID主键的报错解决

解决方案

报错原因是Hibernate未识别到主键ID会由数据库自动生成,因此强制要求手动赋值。要让数据库生成UUID主键,需修改实体类的ID字段注解,明确告知Hibernate主键生成策略。

修改实体类ID字段配置

在@Id注解下方添加@GeneratedValue(strategy = GenerationType.IDENTITY),让Hibernate知道该ID由数据库负责生成:

@Entity
@Table(name = "product_keys")
public class ProductKeys{

    @Id
    @Column(name = "ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private UUID id;
    // 其他字段、构造方法及getter/setter
}

如果需要在实体类中同步数据库列的默认值定义,可补充columnDefinition参数(可选,因为你已通过SQL完成建表):

@Id
@Column(name = "ID", nullable = false, columnDefinition = "uuid DEFAULT gen_random_uuid()")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private UUID id;

原理说明

添加@GeneratedValue(strategy = GenerationType.IDENTITY)后,Hibernate会在执行插入操作时,不再要求提前设置ID值,而是依赖数据库的DEFAULT gen_random_uuid()生成UUID,插入完成后还会将数据库生成的ID自动回填到实体对象的id字段中。

此时再调用productKeysRepository.saveAndFlush(productKeys)即可正常插入记录,不会再抛出IdentifierGenerationException异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:21