2011-01-10 54 views
0

當我點擊登錄時,它檢查數據庫是否有值匹配,然後我得到這個錯誤,否則它打印我nulljava.lang.ClassCastException:java.lang.Integer不能轉換

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) at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1154) at com.vaadin .ui.Button.fireClick(Button.java:371) at com.vaadin.ui.Button.changeVariables(Button.java:193) at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094) at com.vaadin.terminal.gwt.server .AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:590) at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:266) at 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) at org .mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) 在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 在有機.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在org.mortbay.jetty.Server.handle(服務器.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay。 jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:943) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at 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。運行(QueuedThreadPool.java:582) 產生的原因: java.lang.ClassCastException:java.lang.Integer的 不能com.intermedix.services.LoginService.authenticate被轉換爲 com.intermedix.domain.Login (login服務.java:34) at sun.reflect.NativeMeth odAccessorImpl.invoke0(母語 方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method中。調用(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301) at 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。您可以在com.intermedix.ui.LoginDailog.access $ 0(LoginDailog.java:102) 處登錄$ 1.buttonClick(LoginDailog.java:52) at sun.reflect.NativeMeth odAccessorImpl.invoke0(母語 方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method中。調用(Method.java:597) 在com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:487) ...... 26多個

+0

我可能會花時間重新閱讀有關Hibernate查詢語言。 – 2011-01-10 14:50:55

回答

6

也許你想SELECT l(字母L),而不是SELECT 1(數字1)?當您選擇一個號碼時,該號碼會被返回。因此,Integer

如果此1,就是要限制,然後使用query.setMaxResults(1)

+0

不,他只需要SELECT FROM,和他最後一個問題一樣。 – 2011-01-10 14:51:41

+0

好吧,從技術上講,他只能使用`FROM Login`;) – Bozho 2011-01-10 14:56:04

1

你的名單應該是登錄的

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

那麼,當你做出這樣的:

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

您將獲得一個Login實例,並且不會嘗試投射任何東西,而只是將對象登錄到自己。

相關問題