我有一个类,是一个实体表从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;