【发布时间】:2013-06-18 17:30:12
【问题描述】:
我收到了这个错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36)
[...]
它这么说,因为休眠它正在尝试映射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(显然不为空)
我也尝试将 id 作为整数传递,但结果相同:
getSession().createCriteria(c).add(Restrictions.eq("id", new Integer(id)).ignoreCase()).uniqueResult();
问题是,如果我将实体数据类型更改为String,它工作正常!但我想知道为什么会这样工作。
谢谢大家!!
【问题讨论】:
标签: oracle hibernate sequence classcastexception