22

HibernateのCriteriaAPIにRestrictions.ilikeは、次のコントラクトを持つ関数があります。

Postgres ilike演算子に似た、大文字と小文字を区別しない「like」

カッコいい。しかし、同じクラスにもlike機能があり、はるかにあいまいな契約があります。

名前付きプロパティに「like」制約を適用します

Criteria cr = session.createCriteria(Employee.class);

// To get records having fistName starting with zara
cr.add(Restrictions.like("firstName", "zara%"));

// Case sensitive form of the above restriction.
cr.add(Restrictions.ilike("firstName", "zara%"));
4

4 に答える 4

13

MySQLでのlike演算子の大文字と小文字の区別は、列のタイプとそれらの照合に依存します(http://dev.mysql.com/doc/refman/5.5/en/case-sensitivevity.htmlを参照)。

HibernateはSQLの「単なる」レイヤーです。like演算子の契約は、SQLlike演算子を発行することです。MySQLとPostgreSQLで同じにしたい場合は、データベーススキーマで適切なタイプと照合を選択してください。しかし、Hibernateはすべてのデータベースに同じルールを魔法のように使用させることはできません。

アプリケーションを設計し、データベースを選択して設計し、観察する動作が期待する動作になるようにします。

PS:しかし、Hibernateのjavadocは...完璧であることに同意します。

于 2011-03-01T22:02:57.843 に答える
2

ilike入力値を低くし、列値を低くします。例:

select * from table where lower(column) like lower(?)

于 2017-09-05T18:42:47.257 に答える
-1

HibernateのCriteriaAPIには、次のコントラクトを持つRestrictions.ilike関数があります。

A case-insensitive "like", similar to Postgres ilike operator

カッコいい。しかし、同じクラスにも同様の機能があり、はるかにあいまいな契約があります。

Apply a "like" constraint to the named property

Criteria cr = session.createCriteria(Employee.class);

// To get records having fistName starting with zara
cr.add(Restrictions.like("firstName", "zara%"));

// Case sensitive form of the above restriction.
cr.add(Restrictions.ilike("firstName", "zara%"));
于 2014-11-15T08:07:50.283 に答える
-2

PostgreSQLには「ILIKE」と「LIKE」の異なる演算子があります。したがって、列のプロパティに関係なく大文字と小文字を区別することが、この問題が発生する理由です。

于 2012-07-02T04:56:06.407 に答える