gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:12:03 26 4
gpt4 key购买 nike

我正在使用 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com