2011-12-09 147 views
0

我开始使用Hibernate,并且我得到了一个应该有枚举类型的实体的以下错误。枚举类型休眠3

java.lang.IllegalArgumentException: No enum const class app.entity.ObjType. 
java.lang.Enum.valueOf(Enum.java:214) 
    org.hibernate.type.EnumType.nullSafeGet(EnumType.java:125) 
    org.hibernate.type.CustomType.nullSafeGet(CustomType.java:109) 
    org.hibernate.type.AbstractType.hydrate(AbstractType.java:104) 
    org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283) 

我有以下枚举类型定义:

package app.entity; 

@Entity 
class Example { 
    @Enumerated(EnumType.STRING) 
    private ObjType type; 
} 

和定义的枚举类如下:

package app.entity; 

public enum ObjType { 
    typeA, 
    typeB 
} 

我在做什么错?还有set和get方法也必须用“@Enumerated(EnumType.STRING)”来注释吗?

我将不胜感激任何帮助。 谢谢

+0

调用hibernate的'hydrate()'的项目实际上在某种程度上并没有在其类路径中使用ObjType类型的枚举?也许这是一个较早的版本或什么? – Gray

回答

0

我认为你必须在它试图加载数据库中的空值,并将它找不到空值的枚举值。注意额外。在错误消息的末尾

app.entity.ObjType. 

它试图与枚举类连接“”。

+0

你是对的!谢谢。 – Loke

0

它看起来非常接近。尝试使用Enum值的大写名称开头。这里有一个类似的帖子,可能也有帮助。它谈到Hibernate 3.2+是必需的。

Enumerations in Hibernate

回来,如果它仍然没有明确

+0

我已经在那里解释它的方式。它不帮助我。为什么它抱怨缺少已定义的Enum类?它发生在我对该实体进行查询时。 – Loke

+0

检查您的数据库中的值是否没有多余的空格(前导或尾随空格)。它们与Enum值相同。你能澄清何时发生这种异常吗? – Brad

+0

您是创建数据库模式还是由Hibernate创建?检查数据库中的数据类型是否不添加任何尾随/前导空格。 – WeMakeSoftware