2016-09-01 92 views
0

enum看起來像這樣映射枚舉表列其中DB值是枚舉領域,而不是標籤

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

JPA不支持任意枚舉值,僅提供「」或「」持久性的支持。 Improvements have been requested for inclusion in JPA 2.2+但誰知道何時(如果)會發生。

單向(便攜式)將是爲該枚舉類型提供JPA AttributeConverter,因此它將Enum轉換爲一個字符串,並保留內部的任意字符串值。

某些JPA提供程序支持自定義處理,如one in DataNucleus JPA。也許你的提供者也有一些東西?