簡體   English   中英

Hibernate Criteria API中Restrictions.like和.ilike之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM