java开源框架集成常见错误之使用Criteria添加查询条件出现java.lang.ClassCastException异常

问题描述:
使用Criteria添加查询条件criteria.add(Restrictions.eq("chcDueId", pageResult.getCondition().getMcuser()));
出现如下异常
javax.servlet.ServletException: java.lang.ClassCastException: java.lang.String
 org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 com.crm.filter.LoginFilter.doFilter(LoginFilter.java:55)
 com.crm.filter.MyFilter.doFilter(MyFilter.java:19)

root cause

java.lang.ClassCastException: java.lang.String
 org.hibernate.type.LongType.set(LongType.java:42)
 org.hibernate.type.NullableType.nullSafeSet(NullableType.java:83)
 org.hibernate.type.NullableType.nullSafeSet(NullableType.java:65)
 org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1513)
 org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1575)
 org.hibernate.loader.Loader.doQuery(Loader.java:661)
 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
 org.hibernate.loader.Loader.doList(Loader.java:2144)
 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
 org.hibernate.loader.Loader.list(Loader.java:2023)
 org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:95)
 org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
 org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
 com.crm.common.CommonDaoImpl.listByPage(CommonDaoImpl.java:170)
 com.crm.dao.impl.SalChanceDaoImpl.getSalChanceByPageCst(SalChanceDaoImpl.java:92)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 java.lang.reflect.Method.invoke(Unknown Source)
 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
 $Proxy5.getSalChanceByPageCst(Unknown Source)
 com.crm.biz.impl.SalChanceBizImpl.getSalChanceByPageCst(SalChanceBizImpl.java:48)
 com.crm.web.action.SalChanceActionList.doPageListCst(SalChanceActionList.java:87)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 java.lang.reflect.Method.invoke(Unknown Source)
 org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
 org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 com.crm.filter.LoginFilter.doFilter(LoginFilter.java:55)
 com.crm.filter.MyFilter.doFilter(MyFilter.java:19)


异常原因:
调用方法criteria.add(Restrictions.eq("chcDueId", pageResult.getCondition().getMcuser()))时
chcDueId在实体类里面是Long型的,而通过pageResult.getCondition().getMcuser()方法得到的是String类型的

解决方法:
把pageResult.getCondition().getMcuser()转换为Long型,即:
criteria.add(Restrictions.eq("chcDueId", new Long(pageResult.getCondition().getMcuser())));

 

你可能感兴趣的:(Java,JSP,开源框架)