繁体   English   中英

在Hibernate标准中区分大小写搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM