让@GeneratedValue用一个特定的值开始一个序列



我有一个类,是一个实体表从PostgreSQL数据库:

@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,
...

当应用程序启动时,该表将填充一些测试数据(通过"INSERT INTO…"从.sql文件中获取)。但是,当通过Hibernate在数据库中创建一个新实例时,ID总是以开头。,迫使我创建它多次,直到生成的ID达到所需的值。

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

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

@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'), ...

选择nextval (mySequence)

将给出序列表

中的下一个可用值
@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;

相关内容

  • 没有找到相关文章