JPA,GeneratedValue 自动递增 50

use*_*419 2 java entity jpa

我正在使用 JPA,当我将数据插入数据库时​​,我的 ID 会自动增加 50。我正在使用 persistence.GeneratedValue 来自动增加它:

这是我的模型/实体类的样子(要插入的实体):

..imports
@Entity
public class Example extends Identifiable  {
   ..
}
Run Code Online (Sandbox Code Playgroud)

可识别:

..imports
@MappedSuperclass
public abstract class Identifiable {
    @Id @GeneratedValue protected long id;
    ..
}
Run Code Online (Sandbox Code Playgroud)

数据库:

#    ID    NAME    ...
1    701   a
2    751   b
3    801   c
Run Code Online (Sandbox Code Playgroud)

任何人都知道问题是什么?

Mik*_*unu 8

GeneratedValue.strategy 的默认值为 GenerationType.AUTO。这意味着什么在 JPA 2 规范中有很好的说明:

AUTO 值指示持久性提供程序应为特定数据库选择适当的策略。AUTO 生成策略可能期望数据库资源存在,或者它可能尝试创建一个。如果供应商不支持模式生成或无法在运行时创建模式资源,则供应商可以提供有关如何创建此类资源的文档。

对于TableGeneratorSequenceGenerator, allocationSize 的默认值都是 50。这意味着保留了 50 个值的块。在关闭时,保留值将消失。如果应用程序在仅使用一个后关闭,则 2 到 50 的值将消失,下次将保留 51 到 100。如果需要对标识符生成进行更多控制,则应使用 auto 以外的策略。例如,可以这样做:

@TableGenerator(
  name = "yourTableGenerator"
  allocationSize = 1,
  initialValue = 1)
@Id 
@GeneratedValue(
  strategy=GenerationType.TABLE, 
  generator="yourTableGenerator")

or:

@SequenceGenerator(name="yourSequenceGenerator", allocationSize=1)
@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, 
                generator="yourSequenceGenerator")
Run Code Online (Sandbox Code Playgroud)