使用Hibernate注释来持久保存Enumerated属性的值

Ike*_*ker 9 java annotations hibernate

我有许多Java枚举,我坚持使用Hibernate.据我所知,有两种不同的标准方法来保存这些枚举:

@Enumerated(EnumType.ORDINAL)
Run Code Online (Sandbox Code Playgroud)

这是默认值,它只保留枚举中的序数值.

@Enumerated(EnumType.STRING)
Run Code Online (Sandbox Code Playgroud)

这会保留枚举值的名称.

到目前为止,这些对我来说工作得很好,但现在我有一个新的枚举,我希望从枚举中保留一个既不是序数也不是名称的自定义值.这可能吗?我四处搜索,看到很多人都在询问如何保留名称,这很容易使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 5

您可以实现UserType具有所需行为的a并配置Hibernate以将其与@Type注释一起使用.

例如,请参阅UserType以使用VARCHAR列保留Typesafe枚举 .


Puc*_*uce 4

是的,我也缺少 JPA 解决方案。

解决方法:

  private int permissionValue;
  private transient Permission permission;
Run Code Online (Sandbox Code Playgroud)

然后在权限的getter/setter中进行转换。

也许您还需要实现一些生命周期方法?(我不确定。) http://download.oracle.com/docs/cd/B32110_01/web.1013/b28221/undejbs003.htm#BABIAAGE