Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对限制区分大小写';等于id';在休眠限制中_Java_Mysql_Sql Server_Hibernate - Fatal编程技术网

Java 对限制区分大小写';等于id';在休眠限制中

Java 对限制区分大小写';等于id';在休眠限制中,java,mysql,sql-server,hibernate,Java,Mysql,Sql Server,Hibernate,我尝试使用Hibernate(3.6.9)在username上执行区分大小写的equals,但该限制似乎不区分大小写。 例如:“AdMin”或“AdMin”都有效,但只有“AdMin”应该正确,否则.size()应该返回0。我会尽量避免像那样使用。有人有不同的解决方案吗 代码: 会话sess=getSessionFactory().getCurrentSession(); @抑制警告(“未选中”) List logins=sess.createCriteria(Login.class).add(

我尝试使用Hibernate(3.6.9)在
username
上执行区分大小写的equals,但该限制似乎不区分大小写。
例如:“AdMin”或“AdMin”都有效,但只有“AdMin”应该正确,否则
.size()
应该返回0。我会尽量避免像那样使用
。有人有不同的解决方案吗

代码:

会话sess=getSessionFactory().getCurrentSession(); @抑制警告(“未选中”) List logins=sess.createCriteria(Login.class).add(Restrictions.idEq(username)).List(); 如果(logins.size()==1){ 返回登录名。获取(0); }否则{ 返回null; }

在这种情况下,Microsoft SQL Server和MySQL没有什么区别。

我认为您需要更改表定义。对于Mysqsl,您需要将
username
列改为
binary或varbinary
,而不是
char/varchar
()。对于SQLServer,请确保
username
使用区分大小写的排序规则(请参阅)

一个简单的解决方法:

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

我害怕这个答案。已经有很多应用程序部署在不同的数据库上,因此此解决方案将花费大量时间;)
    Login login = (Login) getHibernateTemplate().get(Login.class, username);
    if(login != null && !login.getUsername().equals(username)){
        return null;
    }
    return login;