Hibernate的Criteria
API具有Restrictions.ilike
功能,该功能具有以下合同:
不区分大小写的“喜欢”,类似于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%"));
答案 0 :(得分:12)
MySQL中类似运算符的区分大小写取决于列的类型和排序规则(请参阅http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html)。
Hibernate“只是”SQL之上的一层。 like运算符的契约是发出类似SQL的运算符。如果您希望它与MySQL和PostgreSQL相同,那么请在数据库模式中选择正确的类型和排序规则。但是Hibernate不能神奇地让所有数据库使用相同的规则。
设计应用程序,选择和设计数据库,以便您观察到的行为是您期望的行为。
PS:但我同意Hibernate的javadoc是......可以完善的。
答案 1 :(得分:1)
ilike
将使用较低的输入值,以及较低的列值,例如
select * from table where lower(column) like lower(?)
答案 2 :(得分:-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%"));
答案 3 :(得分:-2)
在PostgreSQL中有'ILIKE'和'LIKE'不同的运算符, 因此,独立于列属性的区分大小写就是这个事情发生的原因