java - JPA @SequenceGenerator 注释如何工作

标签 java hibernate jpa sequence sequence-generators

我正在学习 JPA,但对 @SequenceGenerator 感到困惑注释。

据我了解,它会自动为实体的数字身份字段/属性分配一个值。

Q1.这个序列生成器是利用数据库不断增加的数值生成能力还是自己生成数字?

Q2.如果 JPA 使用数据库自​​动增量功能,那么它是否适用于没有自动增量功能的数据存储?

Q3. 如果 JPA 自己生成数值,那么 JPA 实现如何知道接下来要生成哪个值?它是否首先咨询数据库以查看最后存储的值以生成值 (last + 1)?


第 4 季度。 还请说明sequenceNameallocationSize @SequenceGenerator 的属性注释。

最佳答案

sequenceName 是数据库中序列的名称。这是您指定数据库中已存在的序列的方式。如果你走这条路,你必须指定 allocationSize 它需要与 DB 序列用作其“自动增量”的值相同。

用法:

@GeneratedValue(generator="my_seq")
@SequenceGenerator(name="my_seq",sequenceName="MY_SEQ", allocationSize=1)

如果你愿意,你可以让它为你创建一个序列。但要做到这一点,您必须使用 SchemaGeneration 来创建它。为此,请使用:

@GeneratedValue(strategy=GenerationType.SEQUENCE)

此外,您还可以使用自动生成,它将使用表格来生成 ID。在使用此功能时,您还必须在某些时候使用 SchemaGeneration,以便可以创建生成器表。为此,请使用:

@GeneratedValue(strategy=GenerationType.AUTO)

关于java - JPA @SequenceGenerator 注释如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595124/

相关文章:

java - 套接字批量读取返回一个零数组

java - 在 jpa 2.1 中使用 ManyToMany 时分离的实体

java - 无法将 [B 字段 fr.mypackage.MyClass.data 设置为 java.lang.String

java - JPA 在一个项目中插入触发器之前执行,并在另一个项目中具有不同的行为

hibernate - Spring Boot 上的 SQL 方言配置

java - GEF EditParts 中的直接编辑确认

java - 如何以编程方式将 ActionEvent 发送到 JButton?

java - 如何使用 Hibernate 仅获取一列的值

spring - 在 Grails 中将 Activiti 连接为 Spring Bean

java - JPA : Not able to persist record due to incorrect values being passed from client to server