2014-10-19 5 views
7

umgewandelt werden, wenn ich diesen Code ausführen, gibt mir Ausnahme java.lang.ClassCastException: java.util.ArrayList kann nicht in Java umgewandelt werden .lang.String auf q1.list();java.lang.ClassCastException: java.util.ArrayList kann nicht in 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(); 

dies ist die vollständige Stacktrace:

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) 

ich den obigen Code ich versuche nur die Liste der Titel von SearchHistory Tabelle auf einen bestimmten userId entsprechend zu erhalten (die Abfrage q) und dann Finden Sie die Liste der Bücher mit diesen Titeln (Abfrage q1), aber es gibt ein Problem, das nicht funktioniert. kann mir jemand helfen mit diesem

+0

Können Sie die Quelle 'Query' teilen? Und der volle Stacktrack? – Mureinik

+0

Ich habe full stacktrace und etwas mehr Beschreibung hinzugefügt – u12345

+1

mögliche Duplikate von [Hibernate HQL-Abfrage: Wie setze ich eine Sammlung als benannter Parameter einer Abfrage?] (Http://stackoverflow.com/questions/570229/hibernate-hql- query-how-to-set-a-collection-als-named-parameter-of-query) –

Antwort

4

versuchen, wie diese

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

Nein, es funktioniert nicht – u12345

19

Versuchen

Ändern
q1.setParameter("names", list1); 

zu

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

Dies sollte die akzeptierte Antwort sein –

Verwandte Themen