java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.Map的问题

代码如下:
public List<Map<String, Object>> queryStu() throws Exception {
return (List<Map<String, Object>>)this.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
System.out.println("daoimpl..doinhibetrnate..");
String hql = "select count(distinct sid) from Student";
Query q = session.createQuery(hql);

Object o = q.uniqueResult();//总记录数
allPage = (Integer.valueOf(o.toString()) + pageSize - 1)/pageSize;//总页数
allog = Integer.valueOf(o.toString());

String hql2 = "select sid,sname,ssex,sage,sdept,sclass from Student";
Query q2 = session.createQuery(hql2);
q2.setFirstResult((currentPage - 1)*pageSize);//起始数据
q2.setMaxResults(pageSize);//每页的条数

List<Map<String, Object>> list = q2.list();//object类型,转为map报错
System.out.println("daompl.....+"+list);
for(Map<String, Object> map:list){//object强转map
System.out.println("list-------");
for(String s:map.keySet()){
System.out.println(s+":"+map.keySet());
}
}
return list;
}
});
}
在下面的for循环输出有错,怎么回事?

字面意思,类型转化异常,无法将Object类型对象转化成Map类型对象,你通过hibernate获取的数据集合没有指定其返回类型,默认的就是Object类型,通过在取值之前指定他的返回类型为Map就行了,在你的List<Map<String, Object>> list = q2.list();上面加上一行

q2.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-20
List<Map<String, Object>> list = q2.list();// object类型,转为map报错这里应该写成:
List<Object>list =q2.list();
for(Object object:list)
{
Object[] obj =(Object[])object;

//然后进行输入obj数组里面的值即可

System.out.println(obj[0]);

System.out.println(obj[1]);
//....
}
第2个回答  2013-11-20
Hibernate 分页查询的方法list 返回的是List<实体类>吧 ,你什么返回List<Map>,看你hql应该是List<Student>