2013-06-18 57 views
0

我一直在考慮這個錯誤:休眠ID返回clasCastException

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
    at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36) 
[...] 

它說我這樣,因爲Hibernate它試圖映射ID,並希望得到一個String場,但儘管如此,它正在收到Integer。這是我的實體的一部分:

@SequenceGenerator(name = "platform_seq", sequenceName = "SQ_PLATFORM_ID") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "platform_seq") 
@Id 
@Column(name = "PLATFORM_ID", unique = true, nullable = false) 
private Integer id; 
[...] 
public Integer getId() { 
    return id; 
} 
public void setId(Integer id) { 
    this.id = id; 
} 

正如你所希望的數據庫字段「PLATFORM_ID」是number

PLATFORM_ID NUMBER(38,0) 

和順序是正常順序(得到一個號碼,通過增加1 ...)

SEQUENCE_NAME SQ_PLATFORM_ID 
MIN_VALUE 1 
MAX_VALUE 9999999999999999999999999999 
INCREMENT_BY 1 
LAST_NUMBER 21 

是引發此錯誤路線是這樣的:

getSession().createCriteria(c).add(Restrictions.eq("id", id).ignoreCase()).uniqueResult(); 

其中cClassidString(顯然不是null)

我也試圖通過ID作爲一個整數,但具有相同的結果:

getSession().createCriteria(c).add(Restrictions.eq("id", new Integer(id)).ignoreCase()).uniqueResult(); 

事情是,如果我將實體數據類型更改爲String,它工作正常!但我想知道爲什麼像這樣正確地工作。

謝謝大家!

回答

0

您是否試圖刪除.ignoreCase()

ignoreCase()纔有意義String S,也許這就是爲什麼休眠對待值作爲String

+0

這就是問題!非常感謝你!! – Iozan