2011-12-09 177 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