将枚举映射到表列,其中DB值是枚举字段,而不是标签

时间:2016-09-01 18:41:14

标签: java hibernate jpa enums

我的enum看起来像这样

public enum EventType {

    DATASET_DELETION("DSDEL");

    private static final Map<String, EventType> dbIdLookup = new HashMap<>();

    static {
        for (EventType type : EnumSet.allOf(EventType.class)) {
            String databaseID = type.getId();
            dbIdLookup.put(databaseID, type);
        }
    }

    private String id;

    EventType(String _id) {

        this.id = _id;
    }

    public String getId() {
        return this.id;
    }

    public EventType getFromDatabaseID(String _databaseID) {

        EventType result = dbIdLookup.get(_databaseID);

        return result;
    }
}

其中 DATASET_DELETION 是我想要引用java代码中的字段值而 DSDEL 是我想要将它映射到数据库中的值。我希望数据库代码更紧凑,java标签更具可读性。

我当前的映射不起作用:

@Column(name = "EVENT_TYPE")
private EventType type;

投掷

java.lang.RuntimeException: java.lang.IllegalArgumentException: Unknown name value for enum class blah.blah.EventType: DSDEL

如何将枚举映射到不是枚举的主要标签的数据库值,而是声明中的一个字段?

1 个答案:

答案 0 :(得分:1)

JPA不支持任意枚举值,仅支持“序数”或“名称”持久性。 Improvements have been requested for inclusion in JPA 2.2+但是谁知道何时会发生这种情况。

一种方式(可移植)是为该Enum类型提供JPA AttributeConverter,因此它将Enum转换为String,并保留内部的任意String值。

有些JPA提供商支持自定义处理,例如one in DataNucleus JPA。也许您的提供商也有一些东西?