![](/img/trans.png)
[英]Difference between Restrictions.and() & Restrictions.conjuction() in Hibernate Criteria API
[英]Difference between Restrictions.like and .ilike in Hibernate Criteria API
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%"));
MySQL中類似運算符的區分大小寫取決於列的類型和排序規則(請參閱http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html )。
Hibernate“只是”SQL之上的一層。 like運算符的契約是發出類似SQL的運算符。 如果你想讓它與MySQL和PostgreSQL相同,那么在數據庫模式中選擇正確的類型和排序規則。 但是Hibernate不能神奇地使所有數據庫使用相同的規則。
設計您的應用程序,選擇和設計您的數據庫,以便您觀察到的行為是您期望的行為。
PS:但我同意Hibernate的javadoc是......完美的。
ilike
將降低您的輸入值,並降低列值,例如
select * from table where lower(column) like lower(?)
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%"));
在PostgreSQL中有'ILIKE'和'LIKE'不同的運算符,所以不區分列屬性的區分大小寫就是這個事情發生的原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.