Вопрос новичка о критериях гибернации

У меня есть класс под названием User, который имеет 2 свойства: логин / пароль. Я пытаюсь аутентифицировать пользователя в своем приложении, используя критерии гибернации, но мой запрос не работает.

[РЕДАКТИРОВАТЬ] Возвращаемое значение - ПУСТО. В моей базе данных есть два пользователя для тестирования.

Вот мой код:

@Override
public User authenticate(String login, String password)
    throws NullPointerException {
    Session session = this.getSession();
    User user = (User) session
        .createCriteria(User.class)
        .add(
                        Restrictions.and(
                            Property.forName("login").eq(login),
                            Property.forName("password").eq(password)
                    )).uniqueResult();

    if (user == null){
        throw new NullPointerException("User not found");
    }

    return user;
}

Может кто-нибудь подскажет, что не так с моим кодом?

С Новым 2011 годом !!


person Dimitri    schedule 02.01.2011    source источник
comment
Что вы получаете обратно / что происходит, когда вы запускаете код?   -  person crnlx    schedule 02.01.2011
comment
Что ж, я не вижу ничего синтаксически неправильного в коде, который вы нам показали. Работает, если убрать условие пароля? (т.е. просто ищите по логину).   -  person Alastair    schedule 02.01.2011
comment
Да, я пытался искать только по логину, но возвращенный пользователь всегда нулевой. Я не понимаю, в чем проблема. Мое отображение очень простое: 2 свойства (логин / пароль с геттерами и сеттерами).   -  person Dimitri    schedule 02.01.2011
comment
Возможно, проблема не в том, что вы запрашиваете. Убедитесь, что ваши login и password действительно соответствуют значениям в базе данных, нет проблем с кодировкой и т. Д.   -  person axtavt    schedule 02.01.2011
comment
Значит, вы храните пароль в открытом виде?   -  person Luke Maurer    schedule 03.01.2011
comment
Это домашнее задание. Я не буду использовать его в прод.   -  person Dimitri    schedule 03.01.2011
comment
Вы не должны бросать NullpointerExceptions. Бросьте UnknownUserexception (вы должны создать такое исключение). Создание исключения NullPointerException - это крайне плохой стиль кода.   -  person Christian Kuetbach    schedule 04.01.2011
comment
У вас есть @Id-столбец? Если вы зарегистрируете все Сущности, найдутся ли они?   -  person Christian Kuetbach    schedule 04.01.2011


Ответы (1)


Сначала вы должны получить пользователя из базы данных. Если пользователь не существует, покажите сообщение на странице входа в систему. Все ваши логины должны быть в столбце unique, чтобы не было необходимости нажимать uniqueResult ограничение.

Во-вторых, как только вы вытащили пользователя, вы просто сравните хэш пароля, и, если он в порядке, позвольте пользователю пройти.

Вышеупомянутое упростит вашу логику Hibernate и, следовательно, упростит устранение неполадок в вашем коде. Вот как это делается на большинстве сайтов. По крайней мере, насколько я понимаю.

person MatBanik    schedule 07.01.2011