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)训练你!