2012-01-30 35 views
1

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

代码:

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; 
} 

微软SQL Server和MySQL不会使在这种情况下的差异。

回答

3

我认为你需要改变表的定义。在Mysqsl的情况下,您需要将您的username列更改为binary or varbinary而不是char/varcharhttp://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html)。对于SQLSERVER,确保username使用区分大小写的排序规则(见list of sql collations

+0

我怕这个答案的。已经有很多应用程序部署在不同的数据库中,因此这种解决方案将花费大量时间;) – Michel 2012-01-30 16:14:33

0

简单的解决方法:

Login login = (Login) getHibernateTemplate().get(Login.class, username); 
    if(login != null && !login.getUsername().equals(username)){ 
     return null; 
    } 
    return login;