在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/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;