我的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
如何将枚举映射到不是枚举的主要标签的数据库值,而是声明中的一个字段?
答案 0 :(得分:1)
JPA不支持任意枚举值,仅支持“序数”或“名称”持久性。 Improvements have been requested for inclusion in JPA 2.2+但是谁知道何时会发生这种情况。
一种方式(可移植)是为该Enum类型提供JPA AttributeConverter
,因此它将Enum转换为String,并保留内部的任意String值。
有些JPA提供商支持自定义处理,例如one in DataNucleus JPA。也许您的提供商也有一些东西?