持久化没有id的实体,自定义生成策略

问题描述 投票:0回答:1

目标是:我需要按以下方式自动递增键:“p1”、“p2”等。Postgres 不能有这样的序列,所以我设置了这样的默认值(我省略了不相关的列) :

-- schema.sql

CREATE SEQUENCE p_sequence;

CREATE TABLE product
(
    id                      VARCHAR(100) DEFAULT 'p' || nextval('p_sequence'),
    PRIMARY KEY (id)
);

package com.example.productapi.data.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
public class Product {
    @Id
    @Column(name = "id")
    private String productId;
}

问题来了:当用户点击 POST 端点并尝试持久化没有 id 的实体时,Hibernate 会抛出

IdentifierGenerationException
(然后由 Spring 翻译)。这是因为它不允许持久化没有 id 的实体,除非有一些
@GeneratedValue
策略。这不是
SEQUENCE
,因为我不完全依赖序列。如果 Hibernate 放松并只信任数据库(它将提供默认值),那就太好了。然而,这不会发生。

有哪些解决方法?

java hibernate spring-data
1个回答
0
投票

您正在使用序列。所以最好用 GenerationType.SEQUENCE 进行注释

@GeneratedValue(strategy = GenerationType.SEQUENCE)
© www.soinside.com 2019 - 2024. All rights reserved.