Java 使用HQL时的ClassCastException

Java 使用HQL时的ClassCastException,java,hibernate,casting,hql,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>(); Li

请参见以下映射

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]);
}
Map result=newhashmap();
List objectList=query.List();
用于(对象:对象列表){
对象[]对象数组=(对象[])对象;
put((整数)objectArray[0],(整数)objectArray[1]);
}
我得到ClassCastException:无法将Long转换为整数


问题:我应该如何检索HQL返回的值作为整数而不是Long???

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


或者(根据建议),最好将地图更改为
map
,这样最终不会丢失任何信息。

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


或者(根据建议),最好将映射更改为
map
,这样最终不会丢失任何信息。

如果您不知道它将是哪个(
Integer
Long
),您可以转换为
Number
并调用
intValue()
longValue()
)。这样,
整数
就可以工作了

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

这样做的一个小缺点是,您最终会取消对数字的绑定并重新绑定以将其放入地图。

如果您不知道它将是哪个(
Integer
Long
),您可以转换为
Number
并调用
intValue()
longValue()
。这样,
整数
就可以工作了

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

这样做的一个小缺点是,您最终会取消编号并重新编号以放入地图。

请注意,您可能会丢失信息。只需使用
Long
而不是
Integer
。请注意,您可能会丢失信息。只需使用
Long
而不是
Integer
。这两个答案都是正确的!(+1)训练你!两个答案都是正确的!(+1)训练你!