我有许多Java枚举,我坚持使用Hibernate。据我所知,有两种不同的标准方法来保存这些枚举:
@Enumerated(EnumType.ORDINAL)
这是默认值,它只保留枚举中的序数值。
@Enumerated(EnumType.STRING)
这会保留枚举值的名称。
到目前为止,这些对我来说都很好,但现在我有一个新的枚举,我想要从enum中保留一个既不是序数也不是名字的自定义值。这可能吗?我四处搜索,看到很多人都在询问如何保留名称,这很容易使用EnumType.STRING完成,但是我希望在我的SQL查询中保留一个可用于比较的int。我试图重写toString()来返回我的自定义值,但这不起作用。
我将在下面粘贴我的java枚举。我想从枚举中保留int值成员。
提前致谢!
public enum Permission {
VIEW (4),
CHANGE(6),
FULL(7);
private int value;
Permission(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
答案 0 :(得分:5)
您可以实现具有所需行为的UserType
,并将Hibernate配置为使用@Type
注释。
例如,请参阅UserType for persisting a Typesafe Enumeration with a VARCHAR column 。
答案 1 :(得分:4)
是的,我也错过了JPA解决方案。
解决方法:
private int permissionValue;
private transient Permission permission;
然后转换getter / setter权限。
也许你还需要实现一些生命周期方法? (我不确定。) http://download.oracle.com/docs/cd/B32110_01/web.1013/b28221/undejbs003.htm#BABIAAGE