当前位置: 首页 > 面试题库 >

Hibernate:@GeneratedValue的工作原理概述

祝高超
2023-03-14
问题内容

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

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


问题答案:

我假设您引用的是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

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



 类似资料:
  • 在  Hibernate操作数据库一节的学习中,我们主要涉及到了 Configuration、SessionFactory、Session、Transaction 和 Query 等多个接口,这些接口在 Hibernate 运行时都扮演着十分重要的角色,本节我们就来介绍以一下 Hibernate 运行时的工作原理。 关于 Configuration、SessionFactory、Session、T

  • 问题内容: 对于映射到HSQLDB中的表的实体中的id字段,我具有以下定义。 但这似乎不会生成唯一的ID。而是尝试将null插入列中,这将导致失败。如果我手动创建一个序列和生成策略以使用该序列,那么数据将按预期持久保存。 自动生成策略不是暗示提供者(在这种情况下为hibernate)将自动选择正确的方法并根据需要进行所有繁重的工作(创建序列,使用本机方法或适用于该特定平台的任何方法)吗?我的理解不

  • 一、mitmproxy的工作原理 Mitmproxy是一种非常灵活的工具。准确了解代理过程的工作原理将有助于您创造性地部署代理,并考虑其基本假设以及如何解决这些假设。本文档详细介绍了mitmproxy的代理机制,从最简单的未加密显式代理开始,到最复杂的交互操作-在存在服务器名称指示的情况下,对受TLS保护的流量进行透明的代理。 二、显式HTTP 配置客户端以使用mitmproxy作为显式代理是拦截

  • 1、Register、Gateway、BusinessWorker进程启动 2、Gateway、BusinessWorker进程启动后向Register服务进程发起长连接注册自己 3、Register服务收到Gateway的注册后,把所有Gateway的通讯地址保存在内存中 4、Register服务收到BusinessWorker的注册后,把内存中所有的Gateway的通讯地址发给Business

  • 工作原理 FIS3 是基于文件对象进行构建的,每个进入 FIS3 的文件都会实例化成一个 File 对象,整个构建过程都对这个对象进行操作完成构建任务。以下通过伪码来阐述 FIS3 的构建流程。 构建流程 fis.release = function (opt) { var src = fis.util.find(fis.project.root); var files = {}; s

  • IoT 客户端框架 Azure IoT 中心为了方便设备连接提供了丰富的连接协议,如 MQTT、HTTP 等,同时 Azure IoT 中心只支持安全连接。与 IoT 中心的连接由设备客户端来完成,每一个连接到 IoT 中心的设备都会创建一个 IoT 中心客户端实例,当连接关闭时,将这个实例释放掉即可。 IoT 中心客户端会向下调用 LL 层来完成工作,LL 层向下对接不同通信协议的传输层,传输层