JAVA异常:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.entity.Advertisem
System.out.println("进入find_add");
this.setCurrentPage(1);//设当前页为1
this.setPageSize(5);//设置每页显示条数,这两个当作参数传进去查出list
List list=advertisementDao.PageList(this.getCurrentPage(),this.getPageSize());
System.out.println(list.size());
/////////////////////下面的for是测试用来在后台输出的advertisement对象getAdName
for(int i=0;i<list.size();i++){
advertisement=(Advertisement)list.get(i);//在这一行发生错误???
System.out.println(advertisement.getAdName());
}
ActionContext.getContext().getSession().put("adlist", list);
//查询总条数
this.setTotalRows(advertisementDao.countRow());
//调用分页
pagination();
return SUCCESS;
}
/////////////////////////////DAO
public List PageList(int pageIndex,int pageSize){
System.out.println("进入PageList");
String sql="select top "+pageSize+" * from advertisement where adId not in (select top "+(pageIndex-1)*pageSize+" adId from advertisement)";
System.out.println("进入PageList2");
SessionFactory sf=this.getSessionFactory();
System.out.println("sf:"+sf==null);
Session session=sf.openSession();
System.out.println("session:"+session==null);
Transaction tx=session.beginTransaction();
List lt=session.createSQLQuery(sql).list();
tx.commit();
session.close();
}
return lt;
}
问题:在advertisement=(Advertisement)list.get(i);这里报下面的错误
,取出来的值在前台页面都是空的。错误:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.entity.Advertisement 展开
多表联查,使用createSQLQuery(sql).list()实际上返回的是一个list集合中包含多条LObject对象(包含多条Object对象),我们要做的是把list遍历以后把每一个LObject转换成Object数组,然后进行遍历,把数组中每一个object对象转换成对应的String,Integer等等类型,然后再通过构造函数实例化转换成想要的对象,大白话可能不太好懂,读完上面的文字再看看代码就明白了,希望能有帮助,本人也是一个还没工作的新人程序员,也是在外网学到的解决办法,亲测好用:
List<Object> result=session.createSQLQuery(sql).list();
Iterator<Object> it = result.iterator();
while(it.hasNext()){
Object[] objs=(Object[])it.next();
String deptno=objs[0].toString();
String deptName=objs[1].toString();
int empNum=Integer.parseInt(objs[2].toString());
int maxSal=Integer.parseInt(objs[3].toString());
double avgSal=Double.parseDouble(objs[4].toString());
int formalNum=Integer.parseInt(objs[5].toString());
int leaveWorkingNum=Integer.parseInt(objs[6].toString());
int tryOutNum=Integer.parseInt(objs[7].toString());
HRMonthlyReport hr=new HRMonthlyReport
(deptno,deptName,empNum,maxSal,avgSal,formalNum,leaveWorkingNum,tryOutNum);
System.out.println("hr="+hr);
list.add(hr);
}