假设我在我的应用程序中使用了字典(即性别:男性、女性)。
我希望将此字典用作 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/