web-dev-qa-db-ja.com

Hibernate Criteria APIのRestrictions.likeと.ilikeの違い

HibernateのCriteria AP​​Iには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%"));
22
mindas

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

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

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

PS:でも、Hibernateのjavadocは...完璧だと私は同意します。

12
JB Nizet

ilikeは、入力値と列値が低くなります。

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

1
Tom Chamberlain