java.lang.ClassCastException:无法强制转换java.lang.Integer

时间:2011-01-10 14:46:48

标签: java hibernate

当我点击登录时,它检查数据库是否有值匹配然后我收到此错误,否则它会打印我 null

public Login authenticate(Login login) {
         String query = "SELECT 1 FROM Login AS l WHERE l.email=? AND l.password=?";
         Object[] parameters = { login.getEmail(), login.getPassword() };
         List resultsList = getHibernateTemplate().find(query,parameters);
         if (resultsList.isEmpty()) {            
         }
         else if (resultsList.size() > 1) {

         }
         else {
           Login login1 = (Login) resultsList.get(0);
           System.out.println("Hello" + login1);
           return login1;
         }       
       return null;  
}

错误

  

原因:java.lang.ClassCastException:   java.lang.Integer无法强制转换为   com.intermedix.domain.Login           在com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:507)           在com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)           在com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1154)           在com.vaadin.ui.Button.fireClick(Button.java:371)           在com.vaadin.ui.Button.changeVariables(Button.java:193)           在com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094)           在com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:590)           在com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:266)           在com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:476)           在javax.servlet.http.HttpServlet.service(HttpServlet.java:820)           在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)           在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)           在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)           在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)           在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)           在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)           at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)           在org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)           在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)           在org.mortbay.jetty.Server.handle(Server.java:326)           在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)           at org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:943)           在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)           在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)           在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)           在org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)           在org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)   引起:   java.lang.ClassCastException:   java.lang.Integer无法强制转换为   com.intermedix.domain.Login           在com.intermedix.services.LoginService.authenticate(LoginService.java:34)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native   方法)           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)           在java.lang.reflect.Method.invoke(Method.java:597)           在org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)           在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)           在$ Proxy32.authenticate(未知来源)           在com.intermedix.ui.LoginDailog.checkLogin(LoginDailog.java:106)           在com.intermedix.ui.LoginDailog.access $ 0(LoginDailog.java:102)           在com.intermedix.ui.LoginDailog $ 1.buttonClick(LoginDailog.java:52)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native   方法)           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)           在java.lang.reflect.Method.invoke(Method.java:597)           在com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:487)           ......还有26个

2 个答案:

答案 0 :(得分:6)

也许你想要SELECT l(L字母)而不是SELECT 1(数字1)?选择数字时,将返回该数字。因此Integer

或者,如果此1是限制,则使用query.setMaxResults(1)

答案 1 :(得分:1)

您的列表应该是登录

List<Login> resultList = (getHibernateTemplate().find(query,parameters);

然后,当你这样做时:

Login login1 = (Login) resultsList.get(0);

您将获得一个登录实例,并且不会尝试投射任何内容,而是将对象登录到自身。