如何使每个表中的主键值应从数字一(1)开始 - PostgreSQL,Spring data jpa

Posted

技术标签:

【中文标题】如何使每个表中的主键值应从数字一(1)开始 - PostgreSQL,Spring data jpa【英文标题】:How to make primary key value in each table should start from numeric One (1) - PostgreSQL , Spring data jpa 【发布时间】:2019-06-04 10:34:45 【问题描述】:

在我当前的项目中,我们使用 PostgreSQL 作为 DB 和 Spring 数据 JPA 来实现持久性。在所有实体类中,我们都使用 GenerationType.SEQUENCE 来生成主键值。它工作正常。但是,每个表中主键的值不是从 1 开始的。该值始终是其他表的主键最大数量的下一个增量值。

我们该如何改变呢? .如何让每张表的主键值从1开始。

【问题讨论】:

Can I configure Hibernate to create separate sequence for each table by default?的可能重复 【参考方案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;

如果我以后遇到这种方法的任何问题,请告诉我。

【讨论】:

以上是关于如何使每个表中的主键值应从数字一(1)开始 - PostgreSQL,Spring data jpa的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis 插入时返回刚插入记录的主键值

Oracle数据库中序列(SEQUENCE)的用法详解

SQL中的每一张表都必须设有主键吗

SQL如何插入自增长的主键值(如图)。谢谢

Oracle 用另一个表的主键值插入和替换值

SQL 主键