JPA / Hibernate中@GeneratedValue中的字段生成器有啥用?

Posted

技术标签:

【中文标题】JPA / Hibernate中@GeneratedValue中的字段生成器有啥用?【英文标题】:What is the use of the field generator in @GeneratedValue in JPA / Hibernate?JPA / Hibernate中@GeneratedValue中的字段生成器有什么用? 【发布时间】:2021-12-14 01:18:48 【问题描述】:

当你创建一个类似的 id 时

@Id
@GeneratedValue(generator = "increment")
private Long Id;

生成器字段的作用是什么?生成器是什么意思?

JPA 的任何实现是否应该为所有类型的生成器提供:例如 generator = "increment"?

【问题讨论】:

可能是重复的。请参阅:***.com/questions/21010801/…,但我在回答中提到的(关于 JPA)也很重要。 【参考方案1】:

它在文档中说:https://docs.oracle.com/javaee/6/api/javax/persistence/GeneratedValue.html#generator()

generator 字段是您指定的位置:要使用的主键生成器的名称,在 SequenceGenerator 或 TableGenerator 注释中指定。

但在我给出的示例中(增量),不仅如此,您还可以使用该字段指定一个休眠生成器,它不是 JPA 的一部分。

增量就是其中之一。 如果您想了解更多关于它们的信息,请看这里: https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#d5e2614

【讨论】:

【参考方案2】:

这是一种创建唯一 ID 的方法。不同的数据库提供了不同的方法来创建唯一 ID。换句话说,当保存新行时,Hibernate/JPA 将自动在该字段上放置一个值。例如mysql提供自增列(strategy=identity),而oracle提供序列(strategy=identity)。

如果数据库不提供上述任何功能,则策略table 使用由 JPA 创建的表,该表用于以安全的方式创建唯一的、单调递增的数字,但代价是对数据库的额外查询.

hibernate 关于这个主题的文档非常非常好,值得一读……而且 Hibernate 的功能比 JPA 多很多,很高兴知道这些。

【讨论】:

以上是关于JPA / Hibernate中@GeneratedValue中的字段生成器有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Spring Boot 中运行两个使用 spring.jpa.generate-ddl 填充的嵌入式数据库?

JPA(Hibernate)

spring.jpa.hibernate.hbm2ddl 和 spring.jpa.hibernate.ddl 之间的区别

from 子句中的 JPA/hibernate 子查询

直接加入 JPA 或 HIBERNATE

ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate