![](/img/trans.png)
[英]how to check username and password in hibernate criteria with case sensitive
[英]Case sensitive Search in Hibernate Criteria
我正在使用Hibernate 3和SQL Server 2008.我想在Hibernate Criteria中进行区分大小写的搜索。 我无法实现它。 我的代码如下:
Criteria criteria = session.createCriteria(User.class); /*line 1*/
criteria.add(Restrictions.eq("userName", userName)); /*line 2*/
我有一个User.java类,它包含一个String userName
。
数据库条目:
id | user_name
--------------
1 | abc
2 | xyz
现在,如果我在第2行传递"abc"
作为userName
,那么它应该从db返回第一条记录。 但是如果我在第2行"aBC"
"Abc"
, "ABC"
, "aBC"
等作为userName
"aBC"
,则不应该获取任何记录。
我访问过这个链接,但它对我没有帮助,因为我不想使用与hql或SQL Server的排序规则。 我愿意使用Criteria
进行整理,但不知道该怎么做。
Criteria criteria = s.createCriteria(User.class);
criteria.add(
Expression.sql("userName = ? collate Latin1_General_CS_AS_KS_WS", userName, new StringType())
);
你不能用休眠。 问题出在MS SQL中 - 默认情况下它使用不区分大小写的排序规则。 可以有两种解决方法:
1选择hibernate并对结果进行程序过滤
2当为创建表格使用区分大小写的归类时,您需要搜索:COLLATE SQL_Latin1_General_CP850_BIN2或其他为您的服务器指定的内容(从SYSTEMPROPERTY中读取)。
你可以试试这个(在Restrictions API中使用ilike)
Criteria criteria = s.createCriteria(User.class);
criteria.add(Restrictions.ilike("userName", userName));
问候
这可能不适合您,但使用lucene / solr进行这类查询可能会更好。 除了不区分大小写的查询之外,它还将为您处理其他常见方案。
我添加了相同的问题,我在mariadb服务器中直接更改了数据库表中的排序规则类型。
我用“COLLATE latin1_general_cs”创建表字段
因此,对该字段的每次搜索都将区分大小写。
我的表格字段看起来像这样。
'case_sensitive_key'varchar(255)CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL DEFAULT'',
希望它会帮助你们中的一些人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.