Вот цель: мне нужно, чтобы ключи автоматически увеличивались следующим образом: «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 и пытается сохранить объект без идентификатора, Hibernate выдает исключение IdentifierGenerationException (которое затем транслируется Spring). Это потому, что он не позволяет сохранять объекты без идентификаторов, если не существует какой-либо стратегии @GeneratedValue. Это не SEQUENCE, поскольку я не полностью полагаюсь на последовательность. Было бы неплохо, если бы Hibernate расслабился и просто доверял БД (которая предоставила бы значение по умолчанию). Однако этого не произойдет.
Каковы обходные пути для этого?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... n-strategy