休眠条件 API 中的 Restrictions.like 和 .ilike 之间的区别

2022-09-02 01:57:42

Hibernate的API具有以下合约的功能:CriteriaRestrictions.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%"));

答案 1

在MySQL中,类似运算符的区分大小写取决于列的类型及其排序规则(请参阅 http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html)。

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

设计应用程序,选择并设计数据库,以便观察到的行为就是预期的行为。

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


答案 2

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

select * from table where lower(column) like lower(?)


推荐