Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate枚举抛出枚举类的未知名称值[true]_Java_Spring_Hibernate_Enums_Hibernate Mapping - Fatal编程技术网

Java Hibernate枚举抛出枚举类的未知名称值[true]

Java Hibernate枚举抛出枚举类的未知名称值[true],java,spring,hibernate,enums,hibernate-mapping,Java,Spring,Hibernate,Enums,Hibernate Mapping,我使用的是MySQL,我有一个列数据类型为Enum,我在实体中定义了一个Enum类型,但是当查询执行以检索数据时,它会引发以下异常: Caused by: java.lang.IllegalArgumentException: Unknown name value [true] for enum class [com.myproject.MyEnum] at org.hibernate.type.EnumType$NamedEnumValueMapper.fromName(EnumTyp

我使用的是MySQL,我有一个列数据类型为Enum,我在实体中定义了一个Enum类型,但是当查询执行以检索数据时,它会引发以下异常:

Caused by: java.lang.IllegalArgumentException: Unknown name value [true] for enum class [com.myproject.MyEnum]
    at org.hibernate.type.EnumType$NamedEnumValueMapper.fromName(EnumType.java:467)
    at org.hibernate.type.EnumType$NamedEnumValueMapper.getValue(EnumType.java:452)
    at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:107)
以下是我的实体和枚举源

public enum MyEnum {
    TRUE("true"),
    FALSE("false");

    private final String name;

    private MyEnum (String name){
        this.name = name;
    } 

    public String toString(){
        return name;
    }
}
在我的表结构中,我定义了enum{true,false}

@Entity
@Table(name="networthcashother")
public class Networthcashother {
    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String assetName;
    private String assetDescription;

    @Enumerated(EnumType.STRING)
    private MyEnum  married; 

    public MuEnum getMarried() {
        return married;
    }

    public void setMarried(MyEnum married) {
        this.married = married;
    }
}

但是,如果我将实体属性类型从Enum更改为boolean,它就可以正常工作。我做错了什么。

枚举类型.字符串将使用
Enum
字符串表示,这意味着它将调用:

  • toString()-将
    枚举
    转换为
    字符串
    表示时
  • -将
    字符串
    表示转换回
    枚举
由于无法重写
valueOf()
,因此默认实现将使用
name()
返回的值

要修复此问题,需要将以下静态方法添加到枚举中:

public static MyEnum getEnum(String value) {
    for(MyEnum v : values())
        if(v.getValue().equalsIgnoreCase(value)) return v;
    throw new IllegalArgumentException();
}

何时调用此方法?它是在将字符串转换为枚举时进行的隐式调用,还是我必须进行此调用?