Java Hibernate标准API中Restrictions.like和.ilike之间的差异
Hibernate的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
标准
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是的,它应该可以工作。当你尝试使用它时会发生什么?这个例子中的第二行注释与这个答案中的第一行相矛盾!