HibernateのCriteria
APIには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%"));
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は...完璧だと私は同意します。
ilike
は、入力値と列値が低くなります。
select * from table where lower(column) like lower(?)