@GenerateValue 和 @GenericGenerator 之间的区别

2024-03-24

有时我发现他们在一起,有时单独……其他时候他们似乎也做同样的事情。

有什么不同?

以下是三个例子。他们的做法有何不同?为什么我不能对所有这些都使用 @GenerateValue?

实施例1

@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment") 
Long id;

实施例2

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private int userId;

实施例3

@ElementCollection
@JoinTable(name="Address",
   joinColumns=@JoinColumn(name="user_id")
)
@GenericGenerator(name="hilo-gen", strategy="hilo")
@CollectionId(columns = @Column(name="Address_id"), generator = "hilo-gen", type = @Type(type="long"))
Collection<Addr> listOfAddresses = new ArrayList<Addr>();

当使用ORM https://en.wikipedia.org/wiki/Object-relational_mapping通常需要生成主键值。

The @GeneratedValue注释表示列的值,必须用注释@Id被生成。要素strategy and generator注释上描述了如何获取生成的值。

有四个可能的值strategy上的元素@GeneratedValue注解:IDENTITY, AUTO, TABLE and SEQUENCE. See more http://www.objectdb.com/api/java/jpa/GenerationType.

所以要回答Part 2对于你的问题,代码片段表明userId将通过数据库中的序列获得。

The generator的元素@GeneratedValue注释表示主键生成器的名称。在Part1对于你的问题,代码片段表明generator named increment将用于获取主键值。increment然后在下一个注释中定义@GenericGenerator. @GenericGenerator是一个 Hibernate 注释,用于表示自定义生成器,它可以是 Hibernate 提供的生成器的类或快捷方式。increment是 Hibernate 生成器的快捷方式:

生成唯一的 long、short 或 int 类型的标识符 当没有其他进程向同一个表中插入数据时。不要 在集群中使用。

In the 第三方对于你的问题,代码使用hilo休眠生成器:

使用 hi/lo 算法有效地生成类型标识符 long、short 或 int,给定表和列(默认情况下 hibernate_unique_key 和 next_hi 分别)作为 hi 的来源 价值观。 hi/lo 算法生成唯一的标识符 对于特定的数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@GenerateValue 和 @GenericGenerator 之间的区别 的相关文章

随机推荐

  • purrr 将 t.test 映射到分割的 df 上

    我是新来的咕噜声 Hadley https stackoverflow com users 16632 hadley有前景的函数式编程R库 http blog rstudio org 2015 09 29 purrr 0 1 0 我正在尝试
  • 为什么人们不访问 Rspec 中的数据库?

    我经常看到Rspec中使用mock的代码 如下所示 describe GET show do it should find and assign question do question Question new Question shou
  • 如何配置 Nginx 以使用 html5 模式

    对于 angularjs 中的干净网址 我必须使用 locationProvider html5Mode true 但是当我刷新页面时 它显示 404 我读到我需要配置服务器文件 结构 html views home html about
  • Spark DataFrame:对组进行操作

    我有一个正在操作的 DataFrame 我想按一组列进行分组 并按组对其余列进行操作 正常情况下RDD land 我认为它看起来像这样 rdd map tup gt tup 1 tup 2 tup 3 tup groupByKey forE
  • document.getElementById 对于单标签 DIV 失败

    我的 HTML 页面上有 2 个 DIV div div div div 我有一个脚本可以访问网络服务并用数据填充它们 document getElementById divDebug innerHtml rawResult documen
  • 最低限度的文本清理

    在接受 存储 处理和显示 Unicode 文本的应用程序中 为了讨论的目的 我们假设它是一个 Web 应用程序 哪些字符应该always从传入文本中删除 我能想到一些 大部分列在C0 和 C1 控制代码维基百科文章 http en wiki
  • 从命令行执行Java

    我的桌面上有一个名为 Stuff 的文件夹 在该文件夹中我有以下内容 你好 java mail jar 而Hello java是从mail jar导入的 所以我需要告诉Hello java寻找mail jar 从 Windows 命令行和
  • 仅使用 Dockerfile 中的其他更改重建相同的 docker 映像

    我使用 Dockerfile 构建 Docker 映像 构建镜像后 我对 Dockerfile 进行了一些基本更改 是否可以仅通过额外的更改来重建相同的映像 由于创建图像需要很长时间 因此我不想完全构建它 提前致谢 所有 docker 构建
  • 设置私有 luarocks 存储库

    对于我的设置 我需要一个 luarocks rock 的私有存储库 我可以将它们安装在我的开发环境中 而无需连接到互联网 为 luarocks 设置远程存储库的步骤是什么 我可以使用 sftp 服务器吗 有人有过这样的经历吗 在深入研究这个
  • C++:类成员引用有效性?

    Class A A int foo m foo foo int m foo int main void A bar 0 int var 5 bar new A var std cout lt lt Is m foo still valid
  • Python中按多个条件排序

    我正在使用Python 3 8 我试图按分数对玩家进行排序 按降序排列 然后 只有当他们具有相同的分数时 才按排名排序 我已经读过排序方法 https docs python org 3 8 howto sorting html Pytho
  • 从其他服务器下载之前是否可以动态压缩文件?

    我想知道是否可以编写浏览器扩展或简单的 Java 脚本代码 其中包含指向不同位置的 URL 列表 可以将所有内容压缩在一起 我是说 例如 有 3 个不同的图像文件 http example1 com a png http example1
  • D3 在将 .data() 设置为附加元素时抛出“无法读取 null 的属性‘ownerDocument’”

    我收到此错误 未捕获的类型错误 无法读取 null 的属性 ownerDocument 这是来自设置的行 data 到最近附加的元素d3 const someSet someSelection filter some filter some
  • ios 延迟位置更新的问题

    过去两天我一直在尝试在应用程序中实现延迟位置更新 我面临的问题是 void locationManager CLLocationManager manager didUpdateLocations NSArray locations 即使在
  • 如何编写使用 Django 模块的独立 Python 脚本?

    在 PyCharm 中 我创建了一个空白的新 Django 应用程序 创建了一些模型并发布manage py makemigrations and manage py migrate 我尝试编写一个独立的脚本 用初始数据填充数据库 在其导入
  • keras mnist.load_data() 速度超慢,一段时间后会抛出错误

    这是我使用的完整代码 import os import numpy as np import matplotlib pyplot as plt from tqdm import tqdm from keras layers import I
  • 在 Windows 上更改 apache 的文档根不起作用

    我正在尝试更改本地 Windows 计算机上的 documentroot 以指向 htdocs 下面的子目录 我已经更改了 httpd conf 中的 DocumentRoot 位置以及目录位置 我已经重新启动了 Apache 但用 PHP
  • 为什么十六进制数会自动转换为十进制数?

    我正在开发一个Python小方法 它需要从另一个文件中读取代表键和值的字典 但我似乎遇到了我发送的数值表示的问题 例如 我的字典中的某些键如下所示 id dict val a 0x0000 val b 0x1000 但我注意到 当我尝试遍历
  • 如果目录不存在则创建

    我正在编写一个 PowerShell 脚本来创建多个目录 如果它们不存在 文件系统看起来与此类似 D D TopDirec SubDirec Project1 Revision1 Reports D TopDirec SubDirec Pr
  • @GenerateValue 和 @GenericGenerator 之间的区别

    有时我发现他们在一起 有时单独 其他时候他们似乎也做同样的事情 有什么不同 以下是三个例子 他们的做法有何不同 为什么我不能对所有这些都使用 GenerateValue 实施例1 Id GeneratedValue generator in