我尝试在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在这种情况下没有什么区别。
答案 0 :(得分:3)
我认为您需要更改表定义。如果是Mysqsl,您需要将username
列更改为binary or varbinary
而不是char/varchar
(http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html)。对于SQLServer,请确保username
使用区分大小写的排序规则(请参阅list of sql collations)
答案 1 :(得分:0)
一个简单的解决方法:
Login login = (Login) getHibernateTemplate().get(Login.class, username);
if(login != null && !login.getUsername().equals(username)){
return null;
}
return login;