我试图将存储在数据库中的字符串(例如ABC1,BCD2)映射到枚举(ABC_1,BCD_2)。

使用休眠,我可以使用以下休眠映射来做到这一点

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


并在LinkEnum中

@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类中,我尝试进行相同类型的映射,但是仍然存在映射枚举的问题。有使用JPA的等效方法吗?

private LinkEnum link;

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

最佳答案

您还可以使用javax.persistence.AttributeConverter(比上述解决方案提供更多的自由)。

为此,实现一个实现AttributeConverter的类,并按如下方式注释您的成员:

@Convert(转换器= NameOfYourConverter.class)

10-01 12:45