2016-09-21 8 views
0

データベースに格納された文字列(例:ABC1、BCD2)を列挙型(ABC_1、BCD_2)にマップしようとしています。 HibernateでJPAで列挙型をマッピングする

は、私は次のhibernateマッピング

<typedef name="LinkEnum" class="GenericEnumUserType"> 
    <param name="enumClass">types.LinkEnum</param> 
    <param name="identifierMethod">value</param> 
    <param name="valueOfMethod">fromValue</param> 
</typedef> 

とし、LinkEnum JPAクラスで

@XmlType(name = "LinkEnum") 
@XmlEnum 
public enum LinkEnum { 

@XmlEnumValue("ABC1") 
ABC_1("ABC1"), 
@XmlEnumValue("BCD2") 
BCD_2("BCD2"); 
private final String value; 

LinkEnum(String v) { 
    value = v; 
} 

public String value() { 
    return value; 
} 

public static LinkEnum fromValue(String v) { 
    for (LinkeEnum c: LinkEnum.values()) { 
     if (c.value.equals(v)) { 
      return c; 
     } 
    } 
    throw new IllegalArgumentException(v); 
} 
} 

でこれを行うことができた、私は同じ種類のをやろうとしていますしかし、それはまだ列挙型のマッピングに問題があります。 JPAでこれと同等の方法がありますか?

private LinkEnum link; 

@Enumerated(EnumType.STRING) 
@Column(name = "LINK", nullable = false, length = 8) 
public LinkEnum getLink() { 
    return this.link; 
} 
+0

私たちはクラス定義全体を見ることができますか? –

答えて

0

@Enumerated

public enum EmployeeStatus {FULL_TIME, PART_TIME, CONTRACT} 

public enum SalaryRate {JUNIOR, SENIOR, MANAGER, EXECUTIVE} 

@Entity public class Employee { 
    //@Enumerated is not mandatory. If it's not specified, It assumes to be an ORDINAL (by default) 
    public EmployeeStatus getStatus() {...} 
    ... 
    @Enumerated(EnumType.STRING) 
    public SalaryRate getPayScale() {...} 
    ... 

}

https://docs.oracle.com/javaee/7/api/javax/persistence/Enumerated.html

0

のマニュアルの良い説明は、このようなあなたの列挙型を定義してあります。

public enum LinkEnum {ABC_1("ABC1"), BCD_2("BCD2")}

そして、あなたのエンティティ、あなたは次のように注釈を付けできます。

@Enumerated(EnumType.STRING) 
    public LinkEnum getLinkEnum() {...} 
+0

ニュースはありますか?あなたの問題を解決しますか? –

1

あなたはまたjavax.persistence.AttributeConverter(上記のソリューションよりもあなたより多くの自由を与える)を使用することができます。このため

、AttributeConverterを実装するクラスを実装し、次のようにクラスであなたのメンバーに注釈を付ける:

@Convert(コンバータ= NameOfYourConverter.class)