我正在使用 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)
任何人都知道问题是什么?
GeneratedValue.strategy 的默认值为 GenerationType.AUTO。这意味着什么在 JPA 2 规范中有很好的说明:
AUTO 值指示持久性提供程序应为特定数据库选择适当的策略。AUTO 生成策略可能期望数据库资源存在,或者它可能尝试创建一个。如果供应商不支持模式生成或无法在运行时创建模式资源,则供应商可以提供有关如何创建此类资源的文档。
对于TableGenerator和SequenceGenerator, 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)
| 归档时间: |
|
| 查看次数: |
5502 次 |
| 最近记录: |