Учитывается регистр ограничений 'equals id' в ограничениях Hibernate

Я пытаюсь сделать регистр с учетом равных 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 ответа

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

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

    Login login = (Login) getHibernateTemplate().get(Login.class, username);
    if(login != null && !login.getUsername().equals(username)){
        return null;
    }
    return login;   
Другие вопросы по тегам