我有一个类,它是 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,
...
当应用程序启动时,该表会填充一些测试数据(来自 .sql 文件,通过“INSERT INTO...”)。但是,当通过 Hibernate 在数据库中创建新实例时,ID 始终以 one 开头,迫使我多次创建它,直到生成的 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'), ...
select nextval('mySequence')
将为您提供序列表中的下一个可用值
关于java - 让 @GenerateValue 开始一个具有特定值的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68854698/