我爲Hibernate + MySQL編寫了一個項目。現在我將它移植到德比(出於許多原因)。HQL是否具有與Restrictions.ilike(對於不區分大小寫的匹配)等效的內容?
現在我發現在查詢中使用LIKE時,Derby是區分大小寫的。這可以使用標準查詢中的Restrictions.ilike(...)
解決......但我有很多複雜使用該查詢的HQL查詢。有沒有辦法在HQL中擁有類似ilike
的功能?
我爲Hibernate + MySQL編寫了一個項目。現在我將它移植到德比(出於許多原因)。HQL是否具有與Restrictions.ilike(對於不區分大小寫的匹配)等效的內容?
現在我發現在查詢中使用LIKE時,Derby是區分大小寫的。這可以使用標準查詢中的Restrictions.ilike(...)
解決......但我有很多複雜使用該查詢的HQL查詢。有沒有辦法在HQL中擁有類似ilike
的功能?
有一個在HQL沒有ilike
等效的功能。正如Konstantin已經在他的suggestion中指出的那樣,您的最佳選擇是tune the database connection並將collation設置爲TERRITORY_BASED:SECONDARY
,如本JIRA:DERBY-1748: Global case insensitive setting中所述。
考慮到所有的平等性(=
)和like
將不區分大小寫。這可能會有點過分,並且不適合您的特定情況。
解決此問題的另一種方法是創建基於函數的索引(當然,如果Derby支持它們)並調整HQL以合併like
和lower
這樣。
Query q = session.createQuery("... WHERE lower(entity.field) like ?)");
q.setString(0, '%' + variable.toLowerCase() + '%');
如果Derby不支持FBI(我認爲沒有),您也可以使用較低的值創建觸發器填充的列並對它們進行索引。
UPDATE這似乎是可能定義導出/自動生成的列,如在此其它JIRA解釋:JIRA-481: implement SQL generated columns。
但gotch4更喜歡保留他的HQL查詢 –
如果他不想更改連接排序規則,他沒有其他選擇。而且我明白他不想將它們變成標準查詢。 –
我明白他 - 可能是重構和測試的地獄 –
我很害怕,沒有辦法通過HQL來實現這一點,因爲它只是被翻譯成本機SQL。我認爲它可以通過調節模式可以:
http://old.nabble.com/case-insensitive-searching-td17756019.html
一個簡單的解決方法是將兩個詞轉換爲大寫(或小寫)是這樣的:從一個DomesticCat貓
其中大寫(cat.name)像「FRI%」
引用:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
您正在告訴** like **將無法在Derby數據庫中使用HQL嗎? – ManuPK
like * will *可以工作,但區分大小寫 – gotch4