gpt4 book ai didi

java - 有没有办法在 JPA 中使用查找表作为转换器?

转载 作者:行者123 更新时间:2023-12-01 17:24:17 25 4
gpt4 key购买 nike

假设我有一个简单的实体,如下所示:

@Entity
@Table(name = "PERSON")
public class Person {

@Id
@Column(name = "NAME")
private String name;

@Column(name = "GENDER")
private String gender;
}

还有两个表,保存信息的实际表和一个查找表。

TABLE PERSON (
NAME VARCHAR2 NOT NULL,
GENDER INT NOT NULL);

TABLE GENDER_LOOKUP (
GENDER_ID INT NOT NULL,
GENDER_NAME VARCHAR2 NOTNULL);

我想将实体中的信息保存到表中,以便使用查找表作为引用,将 String 字段性别自动转换为相应的性别 int。我想到了两种方法,但我想知道是否有更有效的方法。

  1. 创建一个枚举并使用序数枚举来持久化。我宁愿避免这种情况,因为我只希望信息有一个“真实来源”,并且出于各种业务原因,它必须是一个查找表。

  2. 使用@Converter注释并编写自定义转换器。我认为这需要我查询表以提取相关行,因此这意味着每次转换内容时我都必须对数据库进行 JPA 调用。

我目前计划使用 2,但我想知道是否有任何方法可以在数据库本身内完成此操作,因为我认为使用 JPA 执行所有这些操作的成本比我在数据库。本质上是尝试保存一个字符串性别,然后数据库将查看查找表并将其转换为正确的 ID 并保存。

我专门使用 openJpa,但希望这不是特定于实现的。

最佳答案

既然您认真考虑过使用enum,这意味着GENDER_LOOKUP是静态的,即内容在程序运行时不会改变。

因此,您应该使用选项 2,但让转换器在第一次查找时缓存/加载 GENDER_LOOKUP 中的所有记录。这样,您仍然只有一个“事实来源”,而无需在每次查找时都访问数据库。

如果您需要添加新性别1,只需重新启动应用即可刷新缓存。

1) 如今,谁知道需要什么新性别。

关于java - 有没有办法在 JPA 中使用查找表作为转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232655/

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