0

Object を Short に変換したい。私のコードは次のようなものです:

List<Batch> lsMaxBatch = em.createNativeQuery(sqlMaxBatch).getResultList();
Iterator iter = lsMaxBatch.iterator();
while (iter.hasNext()) {
    Short batchId = Short.valueOf(iter.next() + "");
    ls.add(batchId);
}

大丈夫ですか?

私がこのように変換する場合:

Short batchId = (Short) iter.next();

エラーが発生します:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Short

ありがとう

4

1 に答える 1

4

これらのような型指定されていないクエリは、 を返しますList<Object[]>。例外メッセージはこれを示唆しています: [Ljava.lang.Object; cannot be cast....

コードを修正するには:

List<Object[]> lsMaxBatch = em.createNativeQuery(sqlMaxBatch).getResultList();
Iterator<Object[]> iter = lsMaxBatch.iterator();
while (iter.hasNext()) {
    Object[] row = iter.next();
    Short batchId = (Short) row[0];
    ls.add(batchId);
}

はい、List<Object[]>うんざりします。これを改善するには、を返すEntityManagerクエリ作成メソッドTypedQuery<T>の 1 つを使用します。

于 2012-04-24T15:18:48.753 に答える