【发布时间】:2011-09-19 22:46:06
【问题描述】:
我在一个类中有一个枚举,由 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)
课程有:
private Status status;
@JoinColumn(name = "STATUS")
@Enumerated(EnumType.STRING)
public Status getStatus() {
return status;
}
public enum Status {
OK, NOK, NAP;
}
如果我将 OK 更改为 OK2,它可以正常工作。 _OK 也可以。 就我而言,“OK”不是保留名称(就像在这种情况下 uses new 的家伙),因为它编译正确。
谢谢!
更新:
'到目前为止,我解决问题的方法是修改枚举并在数据库中存储'_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;
}
}
错误报告:
【问题讨论】:
-
您的各种测试似乎都经过深思熟虑。看来你有问题!请通过 hibernate 的 jira 报告,包括您的示例代码。
-
@telm,我正在使用 Hibernate 3.4.0.GA,这可能是问题所在。但是,如果我想升级到 3.5.6 或(3.6.5,最后的最终版本),我需要谨慎,因为这是在许多产品中使用的 Maven pom.xml 上设置的。所以,在此之前我必须进行一些测试。但感谢您的建议。我可能会按照@Bohemian 所说的去做并填写错误请求。
-
FWIW 我用 DataNucleus JPA 尝试了你的示例,对象在所有值上都保持正常,并且所有读回都正常。
-
@telm,@DataNucleus,与 3.6.5.Final 相同的问题。我认为问题出在休眠注释中,当我更改 POM.xml 上的休眠版本时,它并没有从 3.4.0.GA 更改。将在报告之前尝试。
标签: java hibernate exception enums