Hibernate/JPA bug - 无法识别枚举中的某些字符串

luc*_*uda 5 java enums hibernate exception

我在类中有一个枚举,由Hibernate映射.其中一个映射字段是和枚举类型,其中包含以下值之一:OK,NOKNAP.NOKNAP按预期工作,但是当该类设置为"OK"时,Hibernate无法映射并检索该值,该值设置为null:

java.lang.IllegalArgumentException: Unknown name value for enum class     com.a.b.c.d.Class$Status: OK
    at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:113)
Run Code Online (Sandbox Code Playgroud)

该班有:

private Status status;

@JoinColumn(name = "STATUS")
@Enumerated(EnumType.STRING)
public Status getStatus() {
    return status;
}

public enum Status {
    OK, NOK, NAP;
}
Run Code Online (Sandbox Code Playgroud)

如果我将OK更改为OK2,它可以正常工作._OK也有效.就我而言,"确定"不是保留名称(就像在这种情况下,这个人使用新的),因为它正确编译.

谢谢!

更新:

到目前为止,我所做的解决问题的方法是修改枚举并在数据库中存储' _OK '而不是' OK ',如上所示.不是很好的解决方案,但它至少起作用.

public enum Status {
    _OK("OK"), 
    NOK("NOK"), 
    NAP("NAP");

    private String desc;

    private Status(String desc){
        this.desc = desc;
    }

    public String getDesc(){
        return desc;
    }
}
Run Code Online (Sandbox Code Playgroud)

错误报告:

一个错误报告已经充满.

Mar*_*elo 10

您遇到的问题是,在您的数据库中,除了OK,NOK,NAP之外,您还拥有其他值,当您检索记录时,您将获得异常,而不是在您持久化时.

从您的异常com.a.b.c.d.Class$Status: OK2看,您的数据库似乎具有该值,因此也是java.lang.IllegalArgumentException: Unknown name value for enum class异常.

检查表格中的无效值,删除/更正它们,然后重试.