Учитывается регистр ограничений 'equals id' в ограничениях Hibernate - PullRequest
1 голос
/ 30 января 2012

Я пытаюсь сделать регистр символов равным username с Hibernate (3.6.9), но кажется, что ограничение нечувствительно к регистру.
Например: «AdMin» или «admin» оба действительны, но только«admin» должно быть правильным, иначе .size() должно возвращать 0. Я бы постарался не использовать like.У кого-то есть другое решение?

Код:

Session sess = getSessionFactory().getCurrentSession();

@SuppressWarnings("unchecked")
List<Login> logins = sess.createCriteria(Login.class).add(Restrictions.idEq(username)).list();
if(logins.size() == 1) {
    return logins.get(0);
} else {            
    return null;
}

Microsoft SQL Server и MySQL в этом случае не имеют значения.

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Я думаю, вам нужно изменить определение таблицы.В случае Mysqsl вам нужно изменить столбец username на binary or varbinary вместо char/varchar (http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html). Для SQLServer убедитесь, что username использует сортировку с учетом регистра (см. список sql* 1008 сортировки *)

0 голосов
/ 30 января 2012

Простой обходной путь:

    Login login = (Login) getHibernateTemplate().get(Login.class, username);
    if(login != null && !login.getUsername().equals(username)){
        return null;
    }
    return login;   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...