このエラーが発生しました:
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();
問題は、Entity データ型を に変更するとString
、正常に動作することです! しかし、なぜこのように正確に機能しているのか知りたいです。
皆さん、ありがとうございました!!