Java Hibernate标准API中Restrictions.like和.ilike之间的差异

Java Hibernate标准API中Restrictions.like和.ilike之间的差异,java,sql,hibernate,database-agnostic,Java,Sql,Hibernate,Database Agnostic,Hibernate的标准API具有限制。ilike函数具有以下契约: A case-insensitive "like", similar to Postgres ilike operator Apply a "like" constraint to the named property 一个不区分大小写的“like”,类似于Postgres-ilike运算符 那很酷。但同一类也有like函数,具有更模糊的契约: A case-insensitive "like", similar to P

Hibernate的
标准
API具有
限制。ilike
函数具有以下契约:

A case-insensitive "like", similar to Postgres ilike operator
Apply a "like" constraint to the named property
一个不区分大小写的“like”,类似于Postgres-ilike运算符

那很酷。但同一类也有
like
函数,具有更模糊的契约:

A case-insensitive "like", similar to Postgres ilike operator
Apply a "like" constraint to the named property
对命名属性应用“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%"));
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运算符的大小写敏感度取决于列的类型及其排序规则(请参阅)

Hibernate“只是”SQL之上的一层。like运算符的契约是发出一个SQL like运算符。如果希望MySQL和PostgreSQL相同,请在数据库模式中选择正确的类型和排序规则。但是Hibernate不能神奇地让所有数据库使用相同的规则

设计你的应用程序,选择并设计你的数据库,这样你观察到的行为就是你期望的行为


PS:但我同意Hibernate的javadoc是。。。完美的。

在PostgreSQL中有“ILIKE”和“LIKE”两个不同的运算符,
因此,独立于列属性的大小写敏感度是发生这种情况的原因

Hibernate的Criteria API具有限制。ilike函数具有以下契约:

A case-insensitive "like", similar to Postgres ilike operator
Apply a "like" constraint to the named property
那很酷。但同一类也有类似的功能,有更模糊的契约:

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%"));
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%"));

ilike
将执行较低的输入值和较低的列值,例如


从表中选择*,其中较低的(列)如较低的(?)

@mmcrae是的,它应该可以工作。当你尝试使用它时会发生什么?这个例子中的第二行注释与这个答案中的第一行相矛盾!