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;
}
问题:数据库中的源列有值(手动,重新编辑)所以当我尝试加载对象时,我得到以下异常
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)
我在这里做错了吗?
答案 0 :(得分:1)
枚举中的source
属性与枚举映射无关。就Hibernate而言,您的数据库必须包含值SOURCE_MANUAL
和SOURCE_RE_EDITING
。由于其中一个值包含空格,因此可能无法在不迁移数据库的情况下使用常规枚举映射。可能有一些黑客,但似乎你最好只使用字符串进行此映射并手动转换为枚举。
答案 1 :(得分:0)
尝试升级到Hibernate版本3.5.6。
如果这不起作用,你也可以尝试覆盖枚举中的toString()方法并返回枚举名称,它不是很漂亮,但它应该可以让你在短期内解决问题。
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;
}
}