Ошибка: java.lang.ClassCastException - PullRequest
       2

Ошибка: java.lang.ClassCastException

0 голосов
/ 10 января 2011

Обновление всего поста.

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.size() == 1 ) {
        results = (Login)resultsList.get(0);
        System.out.println(results);
        } else {
            System.out.println("Error dude.... ");
        // error no entity or mutiple entities
        }
        return results;
}

Теперь я возвращаю объекты входа.

private void checkLogin() {
        form.commit();

        Login newUser = new Login();
        newUser = ilogin.authenticate(loginbean);
        System.out.println("Its Null Value" + newUser);
        if (newUser == null) {
            getWindow().showNotification("Login failed", LOGIN_ERROR_MSG,
                    Notification.TYPE_WARNING_MESSAGE);
        } else {
            System.out.println(newUser);
            getApplication().setUser(newUser);
        }
    }

Когда нет подходящего электронного письма, я получаю, что такого пользователя нет, а также это заявление распечатывается.System.out.println("Its Null Value" + newUser);

Но при совпадении адреса электронной почты и пароля.Я получаю странную ошибку.

Причина: 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.serserAservice.Serv.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:216b) в org.m.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) в org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle (WebAppConConte: 418) в org.mortbay.jetty.handler.ContextHandlerCollection.handle (ContextHandlerCollection.java:230) в org.mortbay.jetty.handler.HandlerCollection.handle (HandlerCollection.java:114) в org.mortbay.jetty.hand.HandlerWrapper.handle (HandlerWrapper.java:152) в org.mortbay.jetty.Server.handle (Server.java:326) в org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) в org.mortbay.jet.HttpConnection $ RequestHandler.content (HttpConnection.java:943) по адресу org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:756) по адресу org.mortbay.jetty.HttpParser.parseAvailser (Hp):218) в org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) в org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:410) в org.mortbay.thread.QueuedThreadPol(QueuedThreadPool.java:582) Причина: java.lang.ClassCastException: java.lang.Integer не может быть приведен к com.intermedix.domain.Login в com.intermedix.services.LoginService.authenticate (LoginService.java:31) вsun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.intho.j.fho.jjвызывать (Method.java:597) в org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection (AopUtils.java:301) в org.springframework.aop.framework.ReflectiveMethodInvocation.invodjvof.jpg.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:149) в org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:106) в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethojin)в 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

Обновление

Мой класс EJB

package com.intermedix.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="users")
public class Login {
      public Login(){}
        private Long id = null;
        private String email;
        private String password;

        public Login(String email, String password)
        {
            this.email = email;
            this.password = password;
        }

        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;

        }
}

а также я обновил в соответствии с запросом.

Ответы [ 4 ]

6 голосов
/ 10 января 2011

Когда вы выполняете запрос как

ВЫБЕРИТЕ адрес электронной почты, id ИЗ логина ГДЕ адрес электронной почты =? И пароль =?

Вы просите Hibernate предоставить вам конкретные свойства email и id от объекта Login. Затем Hibernate выдаст вам результаты в виде списка массивов, где каждый элемент списка будет представлять массив [email, id].

Если вы просто хотите запросить все Login объекты, которые соответствуют вашим критериям, то сделайте следующее:

ОТ логина ГДЕ электронная почта =? И пароль =?

И тогда ваш список результатов будет содержать Login объектов.

Но что касается того, почему вы пытаетесь привести к LoginService, я понятия не имею. Вы путаете множество различных концепций Hibernate и пытаетесь объединить их все вместе.

Я не хочу показаться бесполезным, но я думаю, что вам действительно нужно правильно читать документы Hibernate и лучше понимать, что вы делаете.

2 голосов
/ 10 января 2011

Согласно вашему вопросу org.hibernate.hql.ast.QuerySyntaxException , я настоятельно предполагаю, что Login - это сопоставленный объект.

В этом случае вам не нужно выполнять сопоставлениемежду результатом запроса и объектом вручную, если вы используете Hibernate правильно:

исправлено (я забыл часть запроса "AS l")

   List results = createQuery(
     "SELECT l FROM login AS l WHERE l.email=:email AND l.password=:password")
     .setParameter("email",login.getEmail())
     .setParameter("password",login.getPassword()).list();
   if (results.isEmpty()) {
     //.. login failed
   } else if (result.size() > 1) {
     throw new SomethingWrongException();
   } else {
     Login login = (Login) results.get(0);
   }
1 голос
/ 10 января 2011

Обновленный вопрос:

Обновите свой запрос:

String query = "SELECT l FROM Login AS l WHERE l.email=? AND l.password=?";

И, пожалуйста, прочитайте руководство: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

1 голос
/ 10 января 2011

попробуйте заменить это:

 return (LoginService) results.get(0);

на это:

 return (Login) results.get(0);

Предполагая, что Login является правильно отображенным спящим объектом, он должен работать.также следует изменить эту строку

String query = "SELECT 1 FROM Login AS l WHERE l.email=? AND l.password=?";

на

String query = "SELECT login FROM Login AS login WHERE login.email=? AND login.password=?";

Также имейте в виду, что предложение @ Ralph очень хорошо для параметризации запросов.Вы должны сделать это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...