5

私は、新しいpostgresql + hibernateセットアップを大文字と小文字を区別しない検索で動作させるための簡単な解決策を探していましたが、運が悪かったです。以前は、大文字と小文字を区別しない検索に関するポリシーを持つ mysql を使用していましたが、Postgresql にはこれがないようです。

たとえば、Hibernate/Postgresql が以下のそれぞれに対して同じ結果を返すようにしたいと考えています。

SELECT * FROM Foo where bar = 'Hello World';

SELECT * FROM Foo where bar = 'hello wOrlD';

私が見つけた唯一の解決策は、何らかの形で「ilike」キーワードを結果のクエリに埋め込むことですが、Hibernate にはこれに対応する何らかの構成があると思いますか? Hibernate と Postgresql に関する私の経験は限られているため、ご意見をいただければ幸いです。

ありがとう

4

4 に答える 4

2

SQL では、以前にトリックを実行したことがあります。これは、ほとんどの RDBMS で SQL に準拠していると思います。

SELECT * FROM UPPER(bar) = 'HELLO WORLD'

パラメータを渡す前に大文字にすることができます。これはおそらく、Hibernate でクエリにRestrictions.ilike()基準を使用するのと同じです。

于 2010-02-08T04:58:38.353 に答える
1

Springは、休止状態とpostgresを接続する方法、トランザクション(必要な場合)、HibernateSessionオブジェクトを取得する方法などを構成するのに便利です。実際、Springを使用すると、多くのものをプロキシするHibernateTemplates(Springオブジェクト)を使用できます。

ただし、実行するクエリに関するプログラム機能はまだあります。この場合、HibernateTemplateを使用して、次のように記述できます。

String parameter = "hello wOrlD"
DetachedCriteria criteria = DetachedCriteria.forClass(objectClass)
                             .add(Restrictions.ilike("name", parameter)));
List<Object> result = template.findByCriteria(criteria);

または、Restrictions.eqまたはsqlRestrictionを使用してSQL部分を実装することを検討できます。

于 2010-02-08T17:25:46.550 に答える
0

単にPostgresに大文字小文字を無視するように指示する方法はありません。

この比較が必要なすべての列の型を変更することがオプションである場合はcitextデータ型を調べてください。

于 2010-02-08T12:48:29.947 に答える
0

両方の回答に感謝します。データベース/jdbcレベルでこの問題を回避する簡単な方法はないようです。したがって、ここでの解決策は、最適ではありませんが、次のとおりです。

  1. 論理データにケーシング標準を適用します。
  2. クライアントからリクエストを受信すると、リクエスト文字列はtoLowerCase()関数でフィルタリングされます。

mysqlを使用していたときは、my.cfg/iniでポリシーを設定するだけでした。postgresqlでポリシーがより複雑になった理由がわかりません。ええとはいえ、これは人生ですか?

于 2010-02-10T22:47:43.647 に答える