我使用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
任何人都知道问题是什么?
答案 0 :(得分:4)
GeneratedValue.strategy的默认值是GenerationType.AUTO。这意味着在JPA 2规范中很好地阐述了:
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")