JPA序列ID增量与直接DB插入ID增量

时间:2019-03-27 13:33:20

标签: sql database jpa h2

当使用JPA和序列分配大小为“ 20”的数据进行持久化时,将查询数据库以获取下一个要使用的20个ID,因此存储的实体的ID值为1、2、3,..

但是,如果在(h2)DB上进行直接SQL INSERT的操作,则ID实际会增加“ 20”,从而导致ID值:21、41、61,...

有一种方法可以保持JPA处理,而SQL INSERT增加id也只能是“ 1”,结果是:21、22、23,...?

Java JPA实体

@Id
@SequenceGenerator( name="team_gen", sequenceName="team_seq", initialValue=1, allocationSize=20 )
@GeneratedValue( strategy=GenerationType.SEQUENCE, generator="team_gen" )
private Long id;

SQL

CREATE SEQUENCE team_seq START WITH 1 INCREMENT BY 20;
CREATE TABLE IF NOT EXISTS team (
    id BIGINT DEFAULT team_seq.nextval PRIMARY KEY,
    team_name VARCHAR(255) NOT NULL
);

我正在将Spring Boot与H2和Flyway一起用于通过SQL进行数据库迁移。


编辑并解释为什么它不是重复项: other question专注于所有使用休眠模式完成的插入顺序,而我的问题要求以下方式:

  • 使用分配大小= 20保留JPA处理以​​通过单个DB请求保留接下来的20个PK ID,然后以增量步长1持久化行
  • 每个直接sql插入的持久性也应保持增量步长为1(但实际上,由于“ INCREMENT BY 20”序列定义,它们的增量步长为“ 20”。

0 个答案:

没有答案