我目前停留在ClassCastException,我无法弄清楚到底发生了什么。
注意 为简单起见,查询本身已被更改,因为我认为问题出在其他地方。
情况如下:我想在服务类中检索数据库条目列表:
List<Object[]> queryList = dao.queryGenericArray("SELECT a, b FROM db");
根据我的理解,queryGenericArray方法应该返回 一个对象数组列表,如DAO类中所定义:
List<Object[]> result = q.list();
list()由hibernate定义。
所以现在我的queryList对象数组没有任何错误,到目前为止一直很好。但是当我尝试从queryList访问一个数组时,我得到一个ClassCastException:
java.lang.ClassCastException:java.util.HashMap无法强制转换为[Ljava.lang.Object;
我现在的问题是,为什么以及在哪里将列表条目定义为HashMap?
提前致谢,如果我遗漏了重要信息,请告诉我。
答案 0 :(得分:0)
好的,由于对我的初始问题的评论,我想通了。
问题是,我在DAO类中监督(或忽略)了一行代码(我不是这个类的作者):
q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
此行将object[]
转换为地图,非常简洁。
我还需要做的是,将queryGenericArray方法的返回类型从object[]
更改为List<HashMap<String, Date>>
,然后再将hibernate方法的结果转换为:
List<HashMap<String, Date>> result = q.list();
现在我可以正确访问传递列表中包含的哈希映射中的数据。