2011-01-10 5 views
0

로그인을 클릭하면 DB와 일치하는 값이 있는지 확인한 다음이 오류가 표시됩니다. 그렇지 않으면 인쇄되지 않습니다. null.java.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.vaadin.event.ListenerMethod에서 com.intermedix.domain.Login 캐스트 할 수없는 .receiveEvent com.vaadin.ui.AbstractComponent.fireEvent (AbstractComponent.java:1154)에서 com.vaadin.event.EventRouter.fireEvent (EventRouter.java:161)에서 (ListenerMethod.java:507) com.vaadin에서 .ui.Button.fireClick (Button.java:371) 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 com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service에서 com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest (CommunicationManager.java:266) 에서 .AbstractCommunicationManager.doHandleUidlRequest (AbstractCommunicationManager.java:590) (AbstractApplicationServlet .java : 476) (javax.servlet.http.HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) at org.mortbay.jetty .servlet.ServletHandler.handle (ServletHandler.java:390) at org (SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle (SecurityHandler.java:216) 에서 org.mortbay.jetty.security.SecurityHandler.handle 조직에서 org.mortbay.jetty.handler.ContextHandlerCollection.handle (ContextHandlerCollection.java:230)에서 (ContextHandler.java:765) org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418)에서 org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) 에서 org.mortbay.jetty.handler.HandlerCollection.handle (HandlerCollection.java:114) org.mortbay.jetty.Server.handle (서버 .java : 326) at org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) at org.mortbay. jetty.HttpParser.parseNext (HttpParser.java:756) at org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:410) at org.mortbay.thread.QueuedThreadPool $ PoolThread. java.lang.ClassCastException가 : 하는 java.lang.Integer가 com.intermedix.services.LoginService.authenticate에서 com.intermedix.domain.Login 캐스트 할 수없는 (LoginService에 의한 실행 (QueuedThreadPool.java:582) 를 .java : 34) at sun.reflect.NativeMeth java.lang.reflect.Method의에서 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) 에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) 에서 odAccessorImpl.invoke0 (기본 방법) .().().자바 : org.springframework에서 org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:106) 에서 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:149) 182) . 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) at com.intermedix.ui.LoginDailog.access $ 0 (LoginDailog.java:102) at com.intermedix.ui.LoginDailog $ 1.buttonClick (LoginDailog.java:52) at sun.reflect.NativeMeth java.lang.reflect.Method의에서 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) 에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) 에서 odAccessorImpl.invoke0 (기본 방법) . 호출 (Method.java:597) com.vaadin.event.ListenerMethod.receiveEvent (ListenerMethod.java:487) ... 26 아마도 당신이 원하는

+0

나는 Hibernate 쿼리 언어에 대해 다시 읽는 데 시간이 걸릴 것이라고 생각한다. –

답변

6

더에 SELECT l (L-편지)보다는에서 SELECT 1 (1 번)? 숫자를 선택하면 해당 숫자가 반환됩니다. 따라서 Integer

또는이 1이 제한 될 운명 경우에는이 할 때, 다음,

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

다음 로그인이어야한다 query.setMaxResults(1)

+0

아니요, 그는 마지막 질문과 마찬가지로 SELECT FROM이 필요합니다. –

+0

글쎄, 기술적으로 그는'FROM Login' 만 사용할 수 있습니다;) – Bozho

+0

쿼리를 String query = "L LEMEM =? AND L.password =?"; 그리고 그것은 일했습니다 .... 그게 항상 Bozho 도움이 – theJava

1

목록을 사용

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

당신은 로그인 인스턴스를 얻게 될 것이고 무엇이든을 던지려고하지는 않을 것이지만 그 자체로 객체 로그인을 시도 할 것입니다.

+0

나는 같은 오류가 발생했습니다 – theJava

관련 문제