ClassCastException при использовании HQL - PullRequest
1 голос
/ 23 февраля 2010

См. Следующее отображение

public class SomeClass {

    private Integer someField;

}

Когда я вызываю следующий запрос

select someField, count(*) from SomeClass inner join OtherClass... group by ...

И я обработал запрос следующим образом

Map<Integer, Integer> result = new HashMap<Integer, Integer>();

List<Object> objectList = query.list();
for(Object object: objectList) {
    Object [] objectArray = (Object []) object;

    result.put((Integer) objectArray[0], (Integer) objectArray[1]);
}

Я получаю ClassCastException: не могу конвертировать Long в Integer

Вопрос: что я должен сделать, чтобы получить значения, возвращаемые HQL как Integer вместо Long ????

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

Если вы не знаете, что это будет (Integer или Long), вы можете привести к Number и позвонить intValue() или longValue(). Таким образом, Integer или Long будут работать.

result.put((Integer) objectArray[0], ((Number) objectArray[1]).intValue() );

Небольшой недостаток в этом заключается в том, что вы в итоге распаковываете номер и перезаписываете его, чтобы поместить на карту.

1 голос
/ 23 февраля 2010

Я предполагаю, что второй столбец в результате - т.е. count(*) возвращает Long. Вы можете получить его значение int по ((Long) objectArray[1]).intValue()

Или (как предложено), лучше измените карту на Map<Integer, Long>, чтобы в конечном итоге информация не терялась.

...