JPA,GeneratedValue自动增量50

时间:2014-03-22 14:38:38

标签: java jpa entity

我使用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

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

1 个答案:

答案 0 :(得分:4)

GeneratedValue.strategy的默认值是GenerationType.AUTO。这意味着在JPA 2规范中很好地阐述了:

  

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")
相关问题