hibernate中的枚举映射
问题:数据库中的源列有值(手动,重新编辑),因此每当我尝试加载对象时,都会出现以下异常hibernate中的枚举映射,hibernate,enums,hibernate-mapping,Hibernate,Enums,Hibernate Mapping,问题:数据库中的源列有值(手动,重新编辑),因此每当我尝试加载对象时,都会出现以下异常 public enum Sources { SOURCE_MANUAL("manual"), SOURCE_RE_EDITING("re editing"); private String source; private Sources(String source){ this.source = source; }
public enum Sources {
SOURCE_MANUAL("manual"),
SOURCE_RE_EDITING("re editing");
private String source;
private Sources(String source){
this.source = source;
}
public String getSource() {
return source;
}
}
Mapping in Domain object as
@Column(name = "SOURCE")
@Enumerated(EnumType.STRING)
public Sources getSource() {
return this.source;
}
我在这里做错了什么吗?枚举中的
source
属性与枚举映射无关。就Hibernate而言,您的数据库必须包含值SOURCE\u MANUAL
和SOURCE\u RE\u EDITING
。由于其中一个值包含空间,在不迁移数据库的情况下,可能无法使用常规枚举映射。可能有一些黑客攻击,但似乎您最好只使用一个字符串进行映射并手动转换为枚举。尝试升级到Hibernate 3.5.6版
如果这不起作用,您还可以尝试重写枚举中的toString()方法并返回枚举名称,这并不漂亮,但从短期来看,它应该可以帮助您解决问题
Caused by: java.lang.IllegalArgumentException: No enum const class api.domain.Sources.manual
[java] at java.lang.Enum.valueOf(Enum.java:214)
[java] at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:124)
您使用的是什么版本的hibernate?我使用的是3.5.6-Final版本,我无法复制您的问题。我使用的是3.5.3版本。这不起作用,我想不会,因为在hibernate内部hibernate正在执行Enum.valueOf(EnumType.class,“value”),它将失败,因为此“手动”字符串值不存在枚举。正确,但没有帮助。如果Dhirendra想要将一些任意字符串映射到枚举,最好为此创建一个专门的用户类型。
public enum Sources {
SOURCE_MANUAL("SOURCE_MANUAL", "manual"),
SOURCE_RE_EDITING("SOURCE_RE_EDITING", "re editing");
private String source;
private String enumName;
private Sources(String enumName, String source){
this.source = source;
this.enumName = enumName;
}
public String getSource() {
return source;
}
public String toString() {
return enumName;
}
}