我收到了这个错误:
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();
问题是,如果我将 Entity 数据类型更改为String
,它工作正常!但我想知道为什么会这样工作。
谢谢你们!!