严重: Servlet.service() for servlet action threw exception
java.lang.ClassCastException: java.lang.Long
at edu.ustb.cs.dao.PageDao.getCount(PageDao.java:52)
at edu.ustb.cs.dao.UserDaoImpl.searchByClass(UserDaoImpl.java:90)
at edu.ustb.cs.biz.UserBizImpl.searchByClass(UserBizImpl.java:230)
at edu.ustb.cs.action.StuAction.searchByClass(StuAction.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:
270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProces
sor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at edu.ustb.cs.page.GbkFilter.doFilter(GbkFilter.java:26)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128
)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http
11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)主要是分页然后在统计总记录数的时候有错误下面是pageDao.javaprivate String getCountQueryString(String queryString){
//查询总记录数SQL
String countQuery = "";
if(queryString.toUpperCase().startsWith("SELECT")){
countQuery = "select count(*) from (" + queryString + ")";
}else{
countQuery = "select count(*) " + queryString + "";
}
return countQuery;
}


/**
 * 辅助方法,得到查询总记录数
 * @param queryString
 * @param values
 * @return
 */
protected int getCount(String queryString, Object[] values){
//生成查询对象
Query query = session.createQuery(getCountQueryString(queryString));

//设置参数
if(values != null){
for(int i=0; i<values.length; i++){
query.setParameter(i, values[i]);
}
} //得到总数
return ((Integer)query.list().get(0)).intValue();
}
貌似是这一句有问题:return ((Integer)query.list().get(0)).intValue();
下面这是查询时的具体方法:public PageResult searchByClass(String department,String classes, PageBean pageBean) throws HibernateException {

//组成查询sql
String sql = "from Userinfo userinfo where userinfo.department=? and userinfo.classes=?";

//输出日志信息
log.debug("searchByClass:" + sql);
log.debug("department:" + department);
log.debug("classes:" + classes);

PageResult pageresult = new PageResult();
//生成查询对象
Query query = session.createQuery(sql);
//设置参数
query.setString(0, department);
query.setString(1, classes);
//得到查询列表
//设置分页查询数
query.setFirstResult((pageBean.getPage() - 1) * pageBean.getPageSize());
query.setMaxResults(pageBean.getPageSize());

//得到结果
pageresult.setResultList(query.list());

//查询总数
if(pageBean.getCount() <= 0){
pageBean.setCount(getCount(sql,new Object[]{department,classes}));
}

//设置分页信息
pageresult.setPageBean(pageBean);

//得到查询列表
return pageresult;
}
原来是一个参数的时候挺对的,我多加了一个参数,再把new Object里面多加了一个:pageBean.setCount(getCount(sql,new Object[]{department,classes}));然后就报错,是多加参数哪里还要改吗?

解决方案 »

  1.   

    return ((Long)query.list().get(0)).intValue();
      

  2.   

    类型转换错误....你贴代码不贴全.也不显示行号..52行..难道我去给你数??
      
          你看那个地方涉及到long类型的转换..自己排除就得了..肯定是不小心导致的..这种很低级却又很容易犯的错误.... 实在不行你写几个System.out.println ..
     只提供思路,如果这都还要提供完整答案..不好意思.我觉得你已经不适合做程序了...已经懒得去思维,思考.这样做下去也就混日子..
      

  3.   

    貌似是这一句有问题:return ((Integer)query.list().get(0)).intValue();就是这里错了,返回类型不是Integer,应该是Long.原因:进行标量查询,早期的Hibernate返回的是Integer,后来3.1版本以后都改成了返回Long,可能是防止溢出吧。本来是Long类型强制转换为Integer自然会异常。