java - 让 @GenerateValue 开始一个具有特定值的序列

标签 java hibernate spring-data

我有一个类,它是 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/

相关文章:

postgresql - preferredTestQuery 从不与 c3p0 0.9.5.2 和 Tomcat 7 一起使用

java - 使用 Spring Data 连接到数据存储谷歌云

java - Storm 流: Cannot run program "unzip" (in directory ".")

Java:防御性复制 int[] 的最有效方法?

javascript - Java Nashorn 使用 webEngine 事件

hibernate - 如何在 hibernate 过滤条件中使用子选择 HQL?

java - Spring Data REST + JPA 从 OneToMany 集合中删除 [不是所有者端]

java - 如何使用 boot 2.0 和 Neo4j SDN5 在 Spring 单元测试中配置我自己的 GraphDatabaseService 和 GraphAwareRuntime

java - 如果字符串长度相等,则恢复为自然排序顺序

java - 是否可以将枚举值存储在字符串中?