使@GeneratedValue 以特定值开始一个序列

Make @GeneratedValue start a sequence with a specific value

我有一个 class,它是来自 PostgreSQL 数据库的 table 的一个实体:

@Entity
@Table(name = "users")
public class User {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Getter private Long id;
...
CREATE TABLE IF NOT EXISTS users (
    id BIGSERIAL NOT NULL UNIQUE,
...

当应用程序启动时,此 table 会填充一些测试数据(来自 .sql 文件槽“INSERT INTO...”)。但是,当通过 Hibernate 在数据库中创建新实例时,ID 总是以 one 开头,迫使我多次创建它,直到生成的 ID 达到所需值。

我需要 ID 计数器以数字开头,即比 table 中上一条记录的 ID 多 一个。理想情况下不需要我手动指定 ID 值。

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "your_custom_sequence")
    @SequenceGenerator(name="your_custom_sequence", sequenceName = "MY_CUSTOM_SEQ", allocationSize=1) 

您可以在 sql 中定义序列,例如 CREATE SEQUENCE MY_CUSTOM_SEQ MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20 NOMAXVALUE;

您可以这样定义您的实体:

@Entity
@Table(name = "users")
@SequenceGenerator(name = "sequence", sequenceName = "mySequence")
public class User {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")
    @Getter private Long id;

然后在您的 .sql 文件中写入这样的插入查询:

INSERT INTO users values (select nextval('mySequence'), ...

select nextval('mySequence')

将为您提供序列 table

中的下一个可用值