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

时间:2011-02-17 17:07:27

标签: java hibernate annotations

我有许多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;
    }
}

2 个答案:

答案 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