【问题标题】:How to make primary key value in each table should start from numeric One (1) - PostgreSQL , Spring data jpa如何使每个表中的主键值应从数字一(1)开始 - PostgreSQL,Spring data jpa
【发布时间】:2019-06-04 10:34:45
【问题描述】:
在我当前的项目中,我们使用 PostgreSQL 作为 DB 和 Spring 数据 JPA 来实现持久性。在所有实体类中,我们都使用 GenerationType.SEQUENCE 来生成主键值。它工作正常。但是,每个表中主键的值不是从 1 开始的。该值始终是其他表的主键最大数量的下一个增量值。
我们该如何改变呢? .如何让每张表的主键值从1开始。
【问题讨论】:
标签:
postgresql
jpa
spring-data-jpa
【解决方案1】:
您需要为每个表配置一个序列。 This answer explains how to do that.
我只是在这里引用它:
我package-info.java的内容:
@GenericGenerator(
name = "optimized-sequence",
strategy = "enhanced-sequence",
parameters = {
@Parameter(name="prefer_sequence_per_entity", value="true"),
@Parameter(name="optimizer", value="hilo"),
@Parameter(name="increment_size", value="50")})
package org.example.model;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
在使用方面你只需要
@Id @GeneratedValue(generator="optimized-sequence")
public long id;
【解决方案2】:
下面的 ID 代码对我有用。
@Id
@SequenceGenerator(name = "MY_ENTITY_SEQ", sequenceName = "MY_ENTITY_SEQ", allocationSize=1)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "MY_ENTITY_SEQ" )
@Column(updatable = false, nullable = false)
private Integer id;
如果我以后遇到这种方法的任何问题,请告诉我。