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();
其中c
是Class
和id
是String
(顯然不是null)
我也試圖通過ID作爲一個整數,但具有相同的結果:
getSession().createCriteria(c).add(Restrictions.eq("id", new Integer(id)).ignoreCase()).uniqueResult();
事情是,如果我將實體數據類型更改爲String
,它工作正常!但我想知道爲什麼像這樣正確地工作。
謝謝大家!
這就是問題!非常感謝你!! – Iozan