使用HQL时ClassCastException

时间:2010-02-23 14:44:50

标签: java hibernate casting hql

请参阅以下映射

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 个答案:

答案 0 :(得分:3)

如果您不知道它将是哪个(IntegerLong),您可以转为Number并致电intValue()longValue()。这样IntegerLong就可以了。

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

这样做的一个小缺点就是你最终将数字拆箱并重新装箱以放入地图。

答案 1 :(得分:1)

我猜结果中的第二列 - 即count(*)返回Long。您可以通过((Long) objectArray[1]).intValue()

获取其int值

或(如建议的那样),最好将地图更改为Map<Integer, Long>,以便最终不会丢失任何信息。