如果您配置了 ddl auto,我很确定它是特定于表的序列。
在 Google 中搜索 JPA 以查找有关该主题的大量文章,例如:
https://www.objectdb.com/java/jpa/entity/generated
顺序策略
序列策略由两部分组成 - 定义命名序列和在一个或多个类的一个或多个字段中使用命名序列。 @SequenceGenerator 注解用于定义序列并接受名称、初始值(默认为 1)和分配大小(默认为 50)。序列对于应用程序来说是全局的,并且可以被一个或多个类中的一个或多个字段使用。 @GeneratedValue 注解中使用 SEQUENCE 策略将给定字段附加到先前定义的命名序列:
@Entity
// Define a sequence - might also be in another class:
@SequenceGenerator(name="seq", initialValue=1, allocationSize=100)
public class EntityWithSequenceId {
// Use the sequence that is defined above:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
@Id long id;
}
与 AUTO 和 IDENTITY 不同,SEQUENCE 策略会在新实体对象被持久化后(即在提交之前)立即生成一个自动值。当更早需要主键值时,这可能很有用。为了尽量减少到数据库服务器的往返次数,ID 被分组分配。每个分配中的 ID 数量由 allocationSize 属性指定。给定分配中的某些 ID 可能不会被使用。因此,此策略并不能保证序列值中不会有空缺。
餐桌策略
TABLE 策略与 SEQUENCE 策略非常相似:
@Entity
@TableGenerator(name="tab", initialValue=0, allocationSize=50)
public class EntityWithTableId {
@GeneratedValue(strategy=GenerationType.TABLE, generator="tab")
@Id long id;
}
基于 ORM 的 JPA 提供程序(例如 Hibernate、TopLink、EclipseLink、OpenJPA、JPOX 等)使用表模拟序列以支持此策略。 ObjectDB 没有表,所以 TABLE 和 SEQUENCE 策略几乎相同。
一个微小的差异与初始值属性有关。 SEQUENCE 策略维护下一个要使用的序列号,而 TABLE 策略维护最后使用的值。 initialValue 属性的含义是,如果您希望序列号在 TABLE 策略中以 1 开头,则必须在 @SequenceGenerator 注释中指定 initialValue=0。
或:
https://vladmihalcea.com/why-you-should-never-use-the-table-identifier-generator-with-jpa-and-hibernate/
即使是这篇解释序列策略的文章在基准代码 sn-ps 上也有最好的性能:https://vladmihalcea.com/why-you-should-never-use-the-table-identifier-generator-with-jpa-and-hibernate/
如果您的堆栈是 spring-data-jpa,他们有一个非常好的关于关键的文档。
https://spring.io/projects/spring-data-jpa