22

Hibernate 的CriteriaAPI 具有Restrictions.ilike以下功能:

不区分大小写的“like”,类似于 Postgres ilike 运算符

这很酷。但是同一个类也有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-sensitive.html)。

Hibernate 只是 SQL 之上的一层。like 运算符的约定是发出一个 SQL like 运算符。如果您希望 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 的 Criteria API 具有 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 回答