在Hibernate限制中对限制’等于id’区分大小写

我尝试使用Hibernate(3.6.9)对username进行区分大小写等于,但似乎限制是不区分大小写的。
例如:“AdMin”或“admin”都有效但只有“admin”应该是正确的,否则.size()应该返回0.我会尽量避免使用like 。 有人有不同的解决方案吗?

码:

 Session sess = getSessionFactory().getCurrentSession(); @SuppressWarnings("unchecked") List 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没有什么区别。

我认为你需要改变表定义。 在Mysqsl的情况下,您需要将您的username名列更改为binary or varbinary而不是char/varcharhttp://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;