【问题标题】:java.lang.ClassCastException: java.lang.Integer cannot be castjava.lang.ClassCastException: java.lang.Integer 不能被强制转换
【发布时间】:2011-06-06 14:07:13
【问题描述】:

当我点击登录时,它会检查数据库是否有匹配的值然后我得到这个错误,否则它会打印我 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) 在 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) 在 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:487) ... 26 更多

【问题讨论】:

  • 我可能会花时间重新阅读有关 Hibernate 查询语言的信息。

标签: java hibernate


【解决方案1】:

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

或者如果这个1 是限制,那么使用query.setMaxResults(1)

【讨论】:

  • 不,他只需要 SELECT FROM,和他上一个问题一样。
  • 好吧,技术上他只能使用FROM Login ;)
  • 我将查询更改为 String query = "SELECT L FROM Login AS L WHERE L.email=? AND L.password=?";它奏效了......那是 Bozho 总是在那里提供帮助
【解决方案2】:

您的列表应该是登录名

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

那么,当你这样做时:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多