2016-09-01 17 views
0

にラベルを付けていない私のenumDATASET_DELETIONは、私はJavaコードでフィールドの値を参照したいものです。このマッピング列挙型、

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; 
    } 
} 

のようなものを見て、 DSDELは、データベースにマップしたい値です。私はデータベースコードをよりコンパクトにし、Javaラベルをより読みやすくしたい。

私の現在のマッピングは動作しません:

私は主列挙型のラベルが、そのの一つではないデータベースの値に列挙型をマッピングするにはどうすればよい
java.lang.RuntimeException: java.lang.IllegalArgumentException: Unknown name value for enum class blah.blah.EventType: DSDEL 

を投げる

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

宣言のフィールド?

答えて

1

JPAは「」または「」持続性のためのサポートを提供し、任意の列挙型の値をサポートしていません。 Improvements have been requested for inclusion in JPA 2.2+だが、誰がそれが起こるかを知っている。

片方向(ポータブル)は、Enum型のJPA AttributeConverterを提供するため、EnumをStringに変換し、内部的に持つ任意のString値を保持します。

JPAプロバイダの中には、one in DataNucleus JPAのようなカスタム処理をサポートするものがあります。たぶんあなたのプロバイダにも何かがありますか?