【发布时间】:2023-09-20 13:40:01
【问题描述】:
假设我有一个简单的实体如下:
@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);
我想将我实体中的信息保存到表中,以便将字符串字段gender自动转换为对应的gender int,使用查找表作为参考。我想到了两种方法,但我想知道是否有更有效的方法。
创建一个枚举并使用序数枚举来持久化。我宁愿避免这种情况,因为我希望信息只有一个“真实来源”,并且出于各种商业原因,它必须是一个查找表。
使用@Converter 注解并编写自定义转换器。我认为这需要我查询表以提取相关行,因此这意味着每次转换某些内容时我都必须对数据库进行 JPA 调用。
我目前正计划使用 2,但我想知道是否有任何方法可以在数据库本身中执行此操作,因为我认为使用 JPA 执行所有这些操作的成本高于我在数据库中执行所有操作的成本数据库。本质上是尝试持久化一个字符串性别,然后数据库会查看查找表并将其转换为正确的 Id 并保存。
我专门使用 openJpa,但希望这不是特定于实现的。
【问题讨论】: