当前位置: 首页 > 知识库问答 >
问题:

spring data JPA:主键不按顺序自动递增

桑鸿志
2023-03-14

在spring data jpa应用程序中,我创建了一个带有@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......

共有1个答案

姜奇
2023-03-14

首先尝试设置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数据库中的主键列定义为串行:

CREATE TABLE xy (
   id SERIAL PRIMARY KEY;
);

并用以下内容注释该列:

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

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

 类似资料:
  • 问题内容: 我正在尝试添加具有自动增量的主键。 我已经阅读了一些文档和其他问题-有和声明,但是不起作用。 这是我做的: 和 我怎么了 我只想将主键增加1。 问题答案: 是或多或少是一种列类型,所以说就像说,只是说: 如果您想自己创建序列,那么您想将序列中下一个值的默认值设为默认值,这意味着: 为了模拟通常的行为,您还需要使表拥有该序列: 阅读手册的“串行类型”部分可能会很有成果。 我还建议您不要对

  • 问题内容: 我有一个带有自动递增主键的MySQL表。我删除了表中间的一些行。例如,现在在ID列中有类似的内容:12、13、14、19、20。我删除了15、16、17和18行。 我想重新分配/重置/重新排序主键,以便保持连续性,即将19设为15,将20设为16,依此类推。 我该怎么做? 问题答案: 您可以删除主键列并重新创建它。然后应按顺序重新分配所有ID。 但是,在大多数情况下,这可能不是一个好主

  • 我将向一个SQL Server表中添加一行,该表的主键列是自动递增的(< code>identity)。当我以编程方式向表中插入一个新行时,有没有办法获得所添加行的键值,因为我想在另一个相关表中将它用作外键?

  • 问题内容: 我的页面上有一些div,编码为 现在,单击任何一个div,就会进行AJAX调用,将动态列表返回为: 我想在第一次AJAX调用之后将上述动态列表存储在localStorage中。所以我写; 现在,在下一页加载中,我想在DOM的正确位置附加所有dynamicList(所有用户之前单击的那些)(因此,在下次单击期间不会对数据进行AJAX调用) 现在似乎在localStorage的顺序中出现了

  • 问题内容: 这可能在MySql中吗?我可以有一个以字母为前缀的自动递增主键,例如R1234,R1235,R1236 …等等吗? 问题答案: 您可以做的是将密钥存储为两列。一个char前缀和一个auto-incrementing int,它们都被分组为主键。

  • 问题内容: 某些SQL Server允许使用通用语句,例如。我认为这不适用于MySQL,是否有任何这样的解决方法可以跨多个表进行自动选择,还是需要使用查询查询来确定主键? 我一直在解决的方法是在运行查询之前调用。有更有效的方法吗?在选择过程中,MySQL可以确定表的主键吗? 更新: 正如Gordon所指出的那样,通常在MySQL或SQL中没有官方的方式来执行此操作。SAP具有自定义功能。有一些解决