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)
[...]

hibernate は をマッピングしようとしており、フィールドIDを受け取ることを望んでいますが、それにもかかわらず、 . を受け取っているためです。これは私のエンティティの一部です:StringInteger

@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あり、ClassidあるString(明らかにnullではない)

私も 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 を として扱う理由Stringです。

于 2013-06-18T17:39:21.347 に答える