java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.String

java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.String

问题描述:

当我运行此代码时,它给了我例外 java.lang.ClassCastException:java.util.ArrayList不能转换为java .lang.String on q1.list();java.lang.ClassCastException:java.util.ArrayList不能转换为java.lang.String

Query q=session.createQuery("select categoryData FROM SearchHistoryEntity where userId=:u"); 
q.setInteger("u", userId); 
List<String> list1=q.list(); 
if(list1!=null){ 
Query q1=session.createQuery("FROM BookEntity where category in (:names) order by bookId"); 
q1.setParameter("names", list1); 
if(q1.list().size()>9){ 
    q1.setFirstResult(1); 
    q1.setMaxResults(9); 
} 
list=new ArrayList<BookEntity>(); 
list=q1.list(); 

这是完整的堆栈跟踪:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/BookStore] threw  exception [Request processing failed; nested exception is java.lang.ClassCastException:  java.util.ArrayList cannot be cast to java.lang.String] with root cause 
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String 
at org.hibernate.type.descriptor.java.StringTypeDescriptor.unwrap(StringTypeDescriptor.java:39) 
at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$1.doBind(VarcharTypeDescriptor.java:64) 
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90) 
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286) 
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:281) 
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67) 
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:613) 
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1900) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1861) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) 
at org.hibernate.loader.Loader.doQuery(Loader.java:909) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) 
at org.hibernate.loader.Loader.doList(Loader.java:2553) 
at org.hibernate.loader.Loader.doList(Loader.java:2539) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) 
at org.hibernate.loader.Loader.list(Loader.java:2364) 
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231) 
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) 
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 
at com.app.dao.hib.SearchHistoryDaoImpl.categoryData(SearchHistoryDaoImpl.java:150) 
at com.app.service.impl.SearchHistoryServiceImpl.recommend(SearchHistoryServiceImpl.java:62) 
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
at $Proxy37.recommend(Unknown Source) 
at com.app.controller.UserController.recommend(UserController.java:74) 
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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

我上面的代码我只是试图从SearchHistory表对应一个特定的用户id标题的列表(这是查询q),然后找到那些标题的书目列表(查询q1),但有一些问题不起作用。 谁能帮我这个

+0

你能分享'Query'的来源是什么?完整的堆栈跟踪? – Mureinik 2014-10-19 06:55:15

+0

我已经添加了完整的stacktrace和更多描述 – u12345 2014-10-19 07:21:08

+1

[Hibernate HQL Query:如何将Collection设置为Query的命名参数?](http://*.com/questions/570229/hibernate-hql-查询 - 如何设置一个集合作为一个命名参数的查询) – 2014-10-19 08:23:21

尝试这样

List<String> list1= new ArrayList<String>(); 
    list.add(q); 
+0

没有不工作 – u12345 2014-10-19 07:06:40

尝试改变

q1.setParameter("names", list1); 

q1.setParameterList("names", list1); 
+1

这应该是接受的答案 – 2015-08-29 06:25:06