Что не так с этим запросом jpql? (JPA) - PullRequest
1 голос
/ 13 апреля 2011

Можете ли вы помочь мне найти ошибку в моем JPQL-запросе метода входа в систему в моем приложении, пожалуйста?

// Login
public boolean saveUserState(String email, String password) {
    // 1-Send query to database to see if that user exist
    Query query = em
            .createQuery("SELECT r FROM Role r WHERE r.email=:emailparam r.password=:passwordparam");
    query.setParameter("emailparam", email);
    query.setParameter("passwordparam", password);
    // 2-If the query returns the user(Role) object, store it somewhere in
    // the session
    Role role = (Role) query.getSingleResult();
    if (role != null && role.getEmail().equals(email)
            && role.getPassword().equals(password)) {
        FacesContext.getCurrentInstance().getExternalContext()
                .getSessionMap().put("userRole", role);
        // 3-return true if the user state was saved
        return true;
    }
    // 4-return false otherwise
    return false;
}

Я получаю эту ошибку при выполнении:

ТЯЖЕЛАЯ: JSF1073: javax.faces.event.AbortProcessingException пойман во время обработки INVOKE_APPLICATION 5: UIComponent-ClientID = j_idt13: j_idt17, Message = / WEB-INF / шаблоны / BasicTemplate.xhtml @ 61,63 ActionListener = "# {securityController.logIn ()}": javax.ejb.EJBException SEVERE: /WEB-INF/templates/BasicTemplate.xhtml @ 61,63 ActionListener = "# {securityController.logIn ()}": javax.ejb.EJBException javax.faces.event.AbortProcessingException: /WEB-INF/templates/BasicTemplate.xhtml @ 61,63 ActionListener = "# {securityController.logIn ()}": javax.ejb.EJBException .............................. вызвано от: java.lang.IllegalArgumentException: An исключение произошло при создании запрос в EntityManager: исключение Описание: синтаксическая ошибка разбора запрос [ВЫБРАТЬ r ОТ РОЛИ r ГДЕ r.email =: emailparam, r.password =: passwordparam], строка 1, столбец 46: синтаксическая ошибка в [,]. Внутренняя ошибка: MismatchedTokenException (! 79 = - 1)

Ответы [ 2 ]

5 голосов
/ 13 апреля 2011

Вы, вероятно, забыли добавить AND или OR

как:

Query query = em
            .createQuery("SELECT r FROM Role r WHERE r.email=:emailparam AND r.password=:passwordparam");
2 голосов
/ 13 апреля 2011

В вашем запросе отсутствует ссылка между предложениями WHERE.Добавьте AND или OR между обоими предложениями:

SELECT r FROM Role r WHERE r.email=:emailparam AND r.password=:passwordparam
...