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

Pio*_*cki 6 java enums dictionary jpa-2.0

假设我的应用程序中使用了字典(即性别:MALE,FEMALE).

我希望将这个字典用作Java enum.此外,这个字典值是从一堆其他表中引用的,所以你希望它有一个单独的表.

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

你会如何实现这样的用例?
- Dictionary用静态方法创建一个生成enum值的实体?
- 修改了getter和setter Dictionary,返回一个enum而不是Dictionary实例?
- 或者你可能永远不需要enum在一张单独的桌子里坚持下去?

Chr*_*man 0

您可以使用与您的enum. 正如许多人所指出的,这是脆弱的,因为您无法轻松修改您的值:在注释上ordinal()使用修饰符时,JPA 依赖于该方法。EnumType.ORDINAL@Enumerated

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

这个问题的答案显示了另一种选择:在实体中坚持使用整数,但在访问器中进行翻译。