基準ビルダーでどのようにしてignorecaseを実行できますか?私が持っている場合
private final CriteriaBuilder cb
その後、私はcb.asc
またはcb.desc
、ただし大文字と小文字を区別しません。
条件ビルダーでどのようにしてignorecaseを実行できますか
1。JPAプログラムでIgnorecaseを強制する-仕事をし、直接Qに答える
JPA ORDER BY 2列、大文字小文字の区別なし:
Order lcSurnameOrder = criteriaBuilder.order(
criteriaBuilder.lower(Person_.surname));
Order lcFirstnameOrder = criteriaBuilder.order(
criteriaBuilder.lower(Person_.firstname));
criteriaQuery.orderBy(lcSurnameOrder, lcFirstnameOrder);
JPA LIKE、大文字小文字の区別なし:
Predicate lcSurnameLikeSearchPattern = criteriaBuilder.like(
criteriaBuilder.lower(Person_.surname),
searchPattern.toLowerCase());
criteriaQuery.where(lcSurnameLikeSearchPattern);
JPA基準APIを厳密に型指定して使用するために、Person_正規メタモデルクラスがPersonエンティティから生成されたと想定します。
ヒント:最高のパフォーマンスと制御を実現するには、データベースにINSERT/UPDATEを実行するときに、文字列列をLOWERケースまたはINITCAPケースに一度だけ変換することを検討してください。ユーザーが入力した検索パターンについても同じ変換を行います。
2。代替:データベースに照合を適用-ベストプラクティス、よりシンプル、より高いパフォーマンス
SQL-99標準には、ルールに従って文字列内の文字を比較する組み込みモディファイアがあります。
COLLATE <collation name>
文字列の比較、ソート、グループ化に使用できます。大文字と小文字を区別しない一般的な例:
COLLATE SQL_Latin1_General_CP1_CI_AS
または
COLLATE latin1_general_cs
独自のカスタム照合を作成することもできます。
CREATE COLLATION <collation name> FOR <character set specification>
FROM <existing collation name> [ <pad characteristic> ]
照合は、次のいずれかの方法でDBに適用されます(ローカライズ効果からグローバル効果へ)。
WHERE句(=、LIKE、HAVING、>、> =など)
WHERE <expression> = <expression> [COLLATE <collation name>]
WHERE <expression> LIKE <expression> [COLLATE <collation name>]
SELECT DISTINCT句
SELECT DISTINCT <expression> [COLLATE <collation name>], ...
ORDER BY句
ORDER BY <expression> [COLLATE <collation name>]
GROUP BY句
GROUP BY <expression> [COLLATE <collation name>]
列の定義
CREATE TABLE <table name> (
<column name> <type name> [DEFAULT...]
[NOT NULL|UNIQUE|PRIMARY KEY|REFERENCES...]
[COLLATE <collation name>],
...
)
ドメイン定義
CREATE DOMAIN <domain name> [ AS ] <data type>
[ DEFAULT ... ] [ CHECK ... ] [ COLLATE <collation name> ]
文字セット定義
CREATE CHARACTER SET <character set name>
[ AS ] GET <character set name> [ COLLATE <collation name> ]
最初の4つのケースはJPAでは使用できません。これらのSQLコマンドはJPAによって生成され、JPA標準は照合をサポートしていないためです。
。ALTERNATIVE(PROPRIETARY)Oracleは、DBインスタンス全体で大文字と小文字を区別しないようにNLS設定も提供します(構成ファイルで設定可能):
ALTER SESSION SET NLS_COMP='BINARY'; -- Case Sensitive
ALTER SESSION SET NLS_COMP='ANSI'; -- Ignore for LIKE but not =,<,etc
ALTER SESSION SET NLS_COMP='LINGUISTIC';-- Ignore for LIKE,=,<,etc (post 10gR2)
ALTER SESSION SET NLS_SORT='BINARY' ; -- Case Sensitive
ALTER SESSION SET NLS_SORT='BINARY_CI'; -- Ignore
ALTER SESSION SET NLS_SORT='XSPANISH'; -- Ignore according to language rules
ALTER SESSION SET NLS_SORT='LATIN1_GENERAL_CS';
Plusは、ケースを1回限りとして無視する機能
ORDER BY NLSSORT(supplier_name,'NLS_SORT=BINARY_CI') ;
あなたはこれを呼び出すことができます
criteriaBuilder.function("nlssort", String.class, dept_.suppler_name, "NLS_SORT=BINARY_CI");
次にcriteriaQuery.orderyBy
またはselect
などを呼び出します