2014-10-19 16 views
7

, gdy uruchamiam ten kod, podając mi wyjątek java.lang.ClassCastException: java.util.ArrayList nie można przesłać do języka Java .lang.String na q1.list();java.lang.ClassCastException: java.util.ArrayList nie można przesłać do 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(); 

jest to pełny 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) 

I powyższy kod jestem po prostu staramy się uzyskać listę tytułów z tabeli SearchHistory odpowiadających konkretnym userid (co jest q zapytania), a następnie znalezienie listy książek z tymi tytułami (zapytanie q1), ale jest pewien problem, że nie działa. ktoś może mi pomóc z tym

+0

można udostępnić źródło 'Query'? A pełny stacktrace? – Mureinik

+0

Dodałem pełny stacktrace i trochę więcej opisu – u12345

+1

możliwy duplikat [Hibernate HQL Query: Jak ustawić kolekcję jako nazwany parametr zapytania?] (Http://stackoverflow.com/questions/570229/hibernate-hql- query-how-to-set-a-collection-as-a-named-parameter-of-a-query) –

Odpowiedz

4

spróbować jak ten

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

Nie jego nie działa – u12345

19

Spróbuj zmienić

q1.setParameter("names", list1); 

do

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

to powinna być zaakceptowana odpowiedź –

Powiązane problemy