Java 对限制区分大小写';等于id';在休眠限制中
我尝试使用Hibernate(3.6.9)在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(
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;