对Hibernate限制中的限制'等于id'区分大小写

时间:2012-01-30 15:17:20

标签: java mysql sql-server 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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

一个简单的解决方法:

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