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