【问题标题】:JPA, GeneratedValue autoincrement with 50JPA,GeneratedValue 自动递增 50
【发布时间】:2014-04-30 00:20:31
【问题描述】:

我正在使用 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 吗?

标签: java jpa entity


【解决方案1】:

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

【讨论】:

  • 第二个增量为 2。但第一个工作就像一个魅力!谢谢
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2016-06-04
  • 2014-05-08
  • 2016-07-21
  • 2018-09-06
  • 2016-03-07
  • 2015-04-18
相关资源
最近更新 更多