I次のクエリをしました:HQLクエリーを無視アクセント
select u from User u where upper(u.name) like upper(?1)
これは次のようになりますどのように、しかしu.name
と?1
でアクセントを無視して?
ありがとうございました!
I次のクエリをしました:HQLクエリーを無視アクセント
select u from User u where upper(u.name) like upper(?1)
これは次のようになりますどのように、しかしu.name
と?1
でアクセントを無視して?
ありがとうございました!
あなたはどのデータベースを使用していますか?ほとんどの場合、特定のSQLコマンドを送信して照合順序を設定できます。
私はPostgresを使用しています。 –
私はこれを実装する方法を見つけました。
例オリジナルHQLクエリ
public User getByName(String paramName) {
.....
}
DB から
String queryString = "select u from User u where u.name : =paramName";
新規クエリ:
paramName = normalizer(paramName);
String queryString = "select u from User u where " + replacer(u.name) +" : =paramName";
そして、2つの方法:ポルトガル語
public static String normalizer(String s) {
return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
}
public String replacer(String param) {
String t1 = "àâäçéèëêùûüôöïî";
String t2 = "aaaceeeeuuuooii";
String s = param;
for (int i = 0; i < t1.length(); i++) {
s = "replace(" + s + ",'" + t1.charAt(i) + "','" + t2.charAt(i) + "')";
}
return s;
}
、私はいくつかの文字でアクセントを逃したので、私は代用の方法で複数の文字を追加しました:
public String replacer(String param) {
String t1 = "áãàâäçéèëêùûüúóôöïîíÁÀÂÄÃÇÉÈËÊÙÛÜÚÓÔÖÏÎÍ";
String t2 = "aaaaaceeeeuuuuoooiiiAAAAÃCEEEEUUUUOOOIII";
String s = param;
for (int i = 0; i < t1.length(); i++) {
s = "replace(" + s + ",'" + t1.charAt(i) + "','" + t2.charAt(i) + "')";
}
return s;
}
あなたの質問を詳しく教えてください...あなたは比較からアクセント記号を削除しようとしていますか? –
データベース内のパラメータと値の両方のアクセント付き文字を、相談中に無視することをお勧めします。 –
私はそれがデータベース側で行うことができますか分かりません。 Java側で実行可能にする必要があります(クエリを送信する前にアクセントを削除します)。ただし、ベースライブラリ(java.util.text)に関連するものは見つかりませんでした。すべてのアクセント付き文字のマップを対応する「プレーン」文字で作成する必要があります。私はそれが既に行われていないことに驚くだろう。 – toto2