一尘不染

Hibernate:@GeneratedValue的工作原理概述

hibernate

我很难找到关于@GeneratedValue的准确解释,以及从数据库角度来看发生了什么的不同策略。

是否将始终查询数据库并返回最后一个可用值?如果两个不同的进程(不同的Hibernate应用程序)同时访问同一张表会发生什么?特别是使用自动数值和序列


阅读 255

收藏
2020-06-20

共1个答案

一尘不染

我假设您引用的是JPA @GeneratedValue。

@GeneratedValue注解告诉ORM如何找出该字段的值。

例如:

 @Id
 @GeneratedValue(strategy=SEQUENCE, generator="CUST_SEQ")
 @Column(name="CUST_ID")
 public Long getId() { return id; }

 Example 2:

 @Id
 @GeneratedValue(strategy=TABLE, generator="CUST_GEN")
 @Column(name="CUST_ID")
 Long id;

要理解的关键是,生成的值具有策略,并且生成的值的策略确定发生了什么。在上面的示例中,SEQUENCE生成策略意味着ORM在首次保存对象时会向数据库询问序列的新值。第二个示例指定一个表生成策略,这意味着ORM将查询表中的一行以确定id的值。在示例示例2中,未显示使用哪个表的详细信息,因为该表引用了名为“
CUST_GEN”的生成器

您会遇到的典型发电机。

  • 身份-插入后,向自动核实栏询问物品的价值
  • 序列-该值来自数据库序列
  • table-该值来自数据库中的另一个表
  • 根据数据库类型自动选择以上选项之一
  • UUID-在插入之前生成UUID

可以开发定制的生成器。与数据库的交互将取决于生成策略。

2020-06-20