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

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,则效果很好。 我在做什么错。

===============>>#1 票数:6

EnumType.STRING将使用Enum String表示形式,这意味着它将调用:

  • 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();
}

  ask by Talha Bin Shakir translate from so

未解决问题?本站智能推荐:

2回复

Hibernate异常:java.lang.IllegalArgumentException:枚举类的未知名称值[]

我已经将Mysql DB中的列映射到Java中的枚举。 但是表列(手动创建)中有无效的条目,而我在Java中创建的枚举中没有这些条目。 当我尝试加载条目时,出现以下异常。 如果您在数据库的列中有无效的条目,是否可以抑制此异常,即将枚举设置为“ null”?
2回复

如何在冬眠中将枚举序数映射为其值?

我有2个数据库表: 坚持一个类,该类具有一个枚举类型的字段。 在相应的列中,存储枚举值的序数。 坚持枚举值的序数和名称。 如何使用休眠映射将表1中的枚举序数映射到表2中存储的名称? 编辑:基本上,使用SQL SELECT,我将使用序号联接2个表以获取名称。 我
1回复

枚举字段上的像休眠标准

给定一个休眠实体Foo 还有一个枚举Bar 我想运行一个查询,检查Foo.bar的值是否包含某些String matchString =“ ADL”。 当前,我的DetachedCriteria对象构造为: 但是会导致java.lang.ClassCastExcep
3回复

Hibernate枚举转换和转换器映射

我正在使用枚举,我想将enum body中的代码存储在数据库中。 我正在使用hibernate 5.2.11 ..对于实体映射我正在使用.hbm.xml文件。 我做错了什么? 为什么我不能存储enmus代码。 它不断存储枚举名称或bytearray。 MyEntity.java
1回复

Hibernate逆向工程-将表映射到Java枚举

我正在使用JBoss工具将MS SqlServer数据库反向工程为Hibernate对象的项目。 我想知道是否可以将架构中的某些表映射到Java枚举? 可以在hibernate.reveng.xml文件中进行配置吗? 如果是这样,您有例子吗? 谢谢!
1回复

在休眠状态下读写通用枚举

我有一个包含字段的对象 这样做的原因是因为该对象正在三个不同的项目中使用,并且每个项目都将提供自己的Enum。 看来编写对象很容易,但我看不懂它,并继续努力 当然哪个是最合理的。 那么,有什么方法可以指定每个项目中值指向的枚举?
3回复

如何使用JPA和Hibernate使用映射为ORDINAL的Enum参数进行查询

我需要通过枚举类型从数据库中获取数据。 我有以下枚举: 在我的DAO类中,我有一个方法,它在jsp页面上按所选类型返回对象列表。 在jsp页面上我发送选择的值像String ,是不是? 那怎么看我的方法 我不知道如何创建正确的查询。 Enum i存储在我的数据库中,如
1回复

Hibernate异常:枚举类的未知名称值

尝试从DB中检索记录时,我收到枚举类的未知名称值。 使用JSF 2.0,JPA。 我的数据库中的可能值是'F'或'J' 枚举: 实体: 当我尝试从DB读取记录时,我收到了错误 你能帮我解决这个问题吗? 谢谢 堆栈跟踪: javax.servl
4回复

异常:org.hibernate.MappingException:未知实体

我在应用程序中使用Spring 3和Hibernate 4。 在运行时,我得到了例外。 注意:我在网上搜索,确保我的Entity批注的导入正确,并且xml文件中的组件扫描也进展顺利。 01:51:15,184错误[STDERR] org.hibernate.MappingExc
1回复

Hibernate的枚举类错误的未知序数[46]

我正在使用Hibernate和Spring开发Java Web App。 我将Enum定义如下: 因为我的featureType非常好,并且有可能在开发时删除其中一些,所以我为所有featureType定义了ordinal 。 我在实体中使用FeatureType枚举,如下所示: