2017-06-12 6 views
0

にエンティティフィールドをマッピングするときに休止状態に認識されない理由:javax.persistence.Converter @定義されたユーザーは、私は、次のエンティティは、列挙型のフィールドを含む持つデータベース列

@Entity 
@Table(name = "INPUT_DATA") 
public class InputDataEntity implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @SequenceGenerator(name = "INPUT_DATA_SEQ", allocationSize = 1, sequenceName = "INPUT_DATA_SEQ") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "INPUT_DATA_SEQ") 
    private Long id; 

    @Column(name = "FIELD1", nullable = false) 
    private String field1; 

    @Column(name = "FIELD2", nullable = false) 
    @Convert(converter = Type.Converter.class) 
    private Type field2; 

    // getters and setters 
} 

列挙型がどのように見えます:

public enum Type { 

    ENUM_ITEM_1("item1"), 
    // more items 
    ENUM_ITEM_N("itemN"); 

    private String code; 

    private Type(String code) { 
     this.code = code; 
    } 

    public static Type fromString(String name) { 
     switch (name) { 
      case "item1": 
       return ENUM_ITEM_1; 
      // more cases 
      case "itemN": 
       return ENUM_ITEM_N; 
      default: 
       throw new IllegalArgumentException("Wrong value for Type"); 
     } 
    } 

    @Override 
    public String toString() { 
     return code; 
    } 

    @javax.persistence.Converter 
    public static class Converter implements AttributeConverter<Type, String> { 
     @Override 
     public String convertToDatabaseColumn(Type attribute) { 
      return attribute.toString(); 
     } 

     @Override 
     public Type convertToEntityAttribute(String s) { 
      return Type.fromString(s); 
     } 
    } 
} 

問題は、私は、データベースからデータを取得したいとき、Hibernateは私のコンバータを認識しないということです。

私も試してみた:

  • @Embeddedと@Embeddableが、運を持ちます。
  • @Enumerated(EnumType.STRING)ですが、再び運がありません。

私の質問は: 適切なフィールドを変換するときに、私のコンバータを認識するために休止状態にする方法?

事前に感謝します。

+0

どのバージョンのhibernateとjpaを使用しますか? – xyz

+0

休止状態 - 4.3.7およびjpa 2.1 - 1.0.0 – Armine

答えて

0

最終的に、hereと記述されているように、EnhancedUserType、ParameterizedTypeを実装することによって、StringValuedEnumインターフェイスとその関連するリフレクタとタイプクラスを実装することになりました。

これは、コンバータでの質問はまだ開いたままですが、ユーザー定義の列挙型に対応するDBデータを適切に格納して取得するのに役立ちました。いつか適切な答えが与えられれば、それは非常に高く評価されます。

関連する問題