java - Hibernate enum throw Unknown name value [true] for enum class

标签 java spring hibernate enums hibernate-mapping

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

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 它工作正常。我做错了什么。

最佳答案

EnumType.STRING将使用 Enum字符串表示,这意味着它将调用:

  • toString() - 转换 Enum 时到 String代表
  • valueOf() - 转换 String 时表示回 Enum

  • 因为你不能覆盖 valueOf() ,默认实现将使用 name() 返回的值反而。

    要修复它,您需要将以下静态方法添加到您的 Enum 中:
    public static MyEnum getEnum(String value) {
        for(MyEnum v : values())
            if(v.getValue().equalsIgnoreCase(value)) return v;
        throw new IllegalArgumentException();
    }
    

    关于java - Hibernate enum throw Unknown name value [true] for enum class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280426/

    相关文章:

    java - 与编码相关的数据库连接错误

    java - 无法使用createSQLQuery(sql).executeUpdate()从spring hibernate中的sql插入数据

    java - Hibernate标准如何获取具有最大列值的行

    java - AWS - 无法从 eclipse 将 java 项目部署到 aws beanstalk

    java - 实现由二维数组中的值支持的模型类的最快、最简洁/正确的方法是什么?

    java - 有没有更好的方法使用流重构此代码

    java - 在 hibernate 中使用@OneToMany 或@ManyToMany 针对未映射的类异常

    java - Flink 1.9.1 无法再连接到 Azure Event Hub

    java - camel 通用生产者(通过 spring xml 配置路由)

    java - Hibernate - 实体管理器工厂