请参阅以下映射
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 ????
答案 0 :(得分:3)
如果您不知道它将是哪个(Integer
或Long
),您可以转为Number
并致电intValue()
或longValue()
。这样Integer
或Long
就可以了。
result.put((Integer) objectArray[0], ((Number) objectArray[1]).intValue() );
这样做的一个小缺点就是你最终将数字拆箱并重新装箱以放入地图。
答案 1 :(得分:1)
我猜结果中的第二列 - 即count(*)
返回Long
。您可以通过((Long) objectArray[1]).intValue()
或(如建议的那样),最好将地图更改为Map<Integer, Long>
,以便最终不会丢失任何信息。