gpt4 book ai didi

jpa - @GeneratedValue 与 TABLE 策略的含义

转载 作者:行者123 更新时间:2023-12-02 07:05:52 24 4
gpt4 key购买 nike

JPA规范对注解@GeneratedValue(strategy=TABLE)给出了如下解释:

The TABLE generator type value indicates that the persistence provider must assign primary keys for the entity using an underlying database table to ensure uniqueness.

但是“使用底层数据库表”在实践中意味着什么?是否意味着使用辅助表?或者通过扫描实体表来查找未使用的 ID?还是别的?

最佳答案

查看 JavaDoc for TableGenerator ,它有一个很好的例子来说明它是如何工作的:

示例 1:

@Entity public class Employee {
...
@TableGenerator(
name="empGen",
table="ID_GEN",
pkColumnName="GEN_KEY",
valueColumnName="GEN_VALUE",
pkColumnValue="EMP_ID",
allocationSize=1)
@Id
@GeneratedValue(strategy=TABLE, generator="empGen")
int id;
...
}

示例 2:

@Entity public class Address {
...
@TableGenerator(
name="addressGen",
table="ID_GEN",
pkColumnName="GEN_KEY",
valueColumnName="GEN_VALUE",
pkColumnValue="ADDR_ID")
@Id
@GeneratedValue(strategy=TABLE, generator="addressGen")
int id;
...
}

基本上 ID_GEN 是键值对的内部(非业务)表。每次 JPA 想要生成 ID 时,它都会查询该数据库:

SELECT GEN_VALUE
FROM ID_GEN
WHERE GEN_KEY = ...

并递增 GEN_VALUE 列。这种机制可用于模拟序列或进一步控制生成的 ID。

关于jpa - @GeneratedValue 与 TABLE 策略的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com