5

SQL Server 2008 で Hibernate 3 を使用しています。Hibernate Criteria で大文字と小文字を区別する検索を実行したいと考えています。私はそれを達成することができません。私のコードは以下の通りです:

Criteria criteria = session.createCriteria(User.class); /*line 1*/
criteria.add(Restrictions.eq("userName", userName));    /*line 2*/

を含むUser.javaクラスがありますString userName

DB エントリ:

id | user_name
--------------
1  | abc
2  | xyz

ここで、2 行目のように渡す"abc"userName、データベースから最初のレコードが返されます。しかし、 2 行目のように,などを渡す"Abc"と、レコードは取得されません。"ABC""aBC"userName

このリンクにアクセスしましたが、hql または SQL Server との照合を使用したくないため、役に立ちません。照合を使用することはできますがCriteria、その方法がわかりません。

4

6 に答える 6

7
Criteria criteria = s.createCriteria(User.class);
criteria.add(
    Expression.sql("userName = ? collate Latin1_General_CS_AS_KS_WS", userName, new StringType())
);
于 2013-06-08T04:40:11.873 に答える
2

休止状態ではできません。問題は MS SQL にあります。デフォルトでは、大文字と小文字を区別しない照合が使用されます。次の 2 つの回避策があります。

1休止状態で選択し、結果のプログラムフィルタリングを行います

2 テーブルを作成するときは、フィールドに大文字と小文字を区別する照合順序を使用して検索する必要があります。

于 2012-06-14T10:27:17.997 に答える
0

これを試すことができます (制限 API で ilike を使用)

Criteria criteria = s.createCriteria(User.class);   
criteria.add(Restrictions.ilike("userName", userName));

よろしく

于 2012-06-14T12:40:02.280 に答える
-1

これは適切ではないかもしれませんが、この種のクエリには lucene/solr を使用する方がよい場合があります。大文字と小文字を区別しないクエリに加えて、他の一般的なシナリオも処理します。

于 2012-06-29T09:48:27.397 に答える