0

我收到了这个错误:

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,它工作正常!但我想知道为什么会这样工作。

谢谢你们!!

4

1 回答 1

0

你试过删除.ignoreCase()吗?

ignoreCase()只对 s 有意义String,也许这就是 Hibernate 将 value 视为 a 的原因String

于 2013-06-18T17:39:21.347 回答