luc*_*uda 5 java enums hibernate exception
我在类中有一个枚举,由Hibernate映射.其中一个映射字段是和枚举类型,其中包含以下值之一:OK,NOK或NAP.NOK或NAP按预期工作,但是当该类设置为"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异常.
检查表格中的无效值,删除/更正它们,然后重试.