JPA,GeneratedValue自动增量为50

3
我将使用JPA,当我向数据库插入数据时,我的ID会自动增加50。 我使用persistence.GeneratedValue来自动递增它:
这是我的模型/实体类的样子(要插入的实体):
..imports
@Entity
public class Example extends Identifiable  {
   ..
}

可识别的:

..imports
@MappedSuperclass
public abstract class Identifiable {
    @Id @GeneratedValue protected long id;
    ..
}

数据库:

#    ID    NAME    ...
1    701   a
2    751   b
3    801   c

有人知道问题出在哪里吗?

你的数据库是Oracle吗? - Artem Bilan
1个回答

9

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")

1
第二个以某种方式增加了2。但第一个运行得非常好!谢谢 - user3231419

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接