Учитывается регистр ограничений '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;