java - 在 JPA 2 中实现基于枚举的字典

标签 java dictionary enums jpa-2.0

假设我在我的应用程序中使用了字典(即性别:男性、女性)。

我希望将此字典用作 Java enum。此外,这个字典值是从一堆其他表中引用的,因此您希望将它作为一个单独的表

Java enum 本身不能是一个实体。我可以在我的实体类中使用 enum 属性(注释为 @Enumerated),但这会将枚举(作为 Integer、char 或 String)保存在 使用此 enum 而不是对字典表使用 FK 的表。

您将如何实现此类用例?
- 使用生成enum 值的静态方法创建Dictionary 实体?
- 修改了 Dictionary 的 getter 和 setter,它返回一个 enum 而不是 Dictionary 实例?
- ...或者您可能从来不需要将 enum 保存在单独的表中?

最佳答案

您可以使用与枚举 的序号相匹配的整数 ID 值来定义字典表。正如许多人指出的那样,这是脆弱的,因为您无法轻易修改您的值:JPA 在使用 EnumType.ORDINAL 时依赖于 ordinal() 方法。 @Enumerated 注释上的修饰符。

稍微好一些,您可以指定EnumType.STRING,并将字典表的主键列定义为VARCHAR,其值等于enum 的值名称。这仍然很脆弱,因为您不能再更改您的 enum 名称。

answer for this question显示了另一种选择:坚持在您的实体中使用整数,但在您的访问器中进行转换。

关于java - 在 JPA 2 中实现基于枚举的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185752/

相关文章:

java - 测试线程安全单例的代码中的奇怪行为

c# - 我可以在 C# 的两个不同类中使用相同的枚举吗?

java - 代码在我们没有要求的情况下运行多次

java - 将使用 Point2d 对象引用数组的类转换为使用 java.util.ArrayList<Point2d>

java - 将ArrayList作为值映射到映射时出现不兼容的类型错误

python - 在 Python 中阻止字典?

java - while 循环条件评估

c++ - std::map 自定义键非唯一性问题

python - 如何在删除每个字典的子集时合并成对的字典

java - 解决由于 C++ 导致的 Google protobuf 中枚举字段命名限制的解决方案