【问题标题】:spring data JPA: primary key not sequentially auto increamentingspring data JPA:主键不按顺序自动递增
【发布时间】:2018-09-06 02:29:30
【问题描述】:

在 spring data jpa Application 中,我创建了一个带有 @entity 注释的模型。我将该模型数据保存到表中。我正在自动递增主键。但是当我将数据保存到表中时,它不是按顺序自动递增的。

@GeneratedValue(strategy = GenerationType.AUTO)

类文件

@Entity
@Table(name="exception")
public class Exception implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "exception_seq_generator")
    @SequenceGenerator(name = "exception_seq_generator", sequenceName = "exception_seq")
    @Column(name="exception_id")
    public Integer exceptionId;

    @Column(name="status_code")
    public Integer statusCode;

    public String message;
    public String status;
    public String error;
    //Getter and setter

表格

谁能告诉我为什么主键不按顺序自动递增?为什么它不占用 2,3,4 .....

【问题讨论】:

  • 你能告诉我们序列exception_seq的定义吗?这是在数据库中定义的。
  • 使用 IDENTITY 策略 @GeneratedValue(strategy = GenerationType.IDENTITY) 如果您要自动生成架构 @Column(name="exception_id", columnDefinition="serial")

标签: postgresql spring-data-jpa primary-key


【解决方案1】:

首先尝试设置allocationSize

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "exception_seq_generator")
@SequenceGenerator(name = "exception_seq_generator", sequenceName = "exception_seq", allocationSize=1)
@Column(name="exception_id")
public Integer exceptionId;

同时检查你在数据库中的当前序列,它现在可能有一个错误的值。

更简单的方法:

将 PostgreSQL DB 中的主键列定义为 SERIAL:

CREATE TABLE xy (
   id SERIAL PRIMARY KEY;
);

并使用以下内容注释列:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

SERIAL 类型为您创建一个自动递增序列,并且您的 JPA 实体没有那么多开销。

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 2011-01-25
    • 2016-06-04
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2011-06-08
    相关资源
    最近更新 更多