3
我正在從Hibernate Criteria API升級到JPA2 Criteria API,並且正在運行以下問題,這似乎無法解決。使用JPA2 Criteria API查詢字符串子集
在Hibernate的標準我用Restrictions.sqlRestriction檢查特定類型的串子的:
criteria.add(Restrictions.sqlRestriction("{alias}.location_key = left((?), length({alias}.location_key))", searchObj.getLocationKey(), Hibernate.STRING));
這實質上會檢查輸入字符串的第一個字母N
匹配location_key這是N
字母長。即輸入字符串Canada,ON
應與以下任何內容匹配:Canada
或Can
或C
。
問題是JPA2不允許我們這樣編碼原生sql,而且我不知道如何在沒有left
函數(我認爲可能是mysql特定的)下實現類似的功能。
任何幫助表示讚賞!
我確實包括了我想要生成的sql。 'select ... where location_key = left((「asdfasdf」),length(location_key));'是更準確的查詢版本。子串對我沒有多大好處,因爲它期望表達式,而不是字符串。 –
idbentley
2011-04-27 17:44:28
'CriteriaBuilder.literal(T)'創建一個'Expression'。基本上:'criteriaQuery.where(cb.equals(cb.substring(cb.literal(string),0,location_key.length()),location_key));'應該這樣做。 –
2011-04-28 06:39:46
非常感謝 - 我實際上昨天通過參數得到了這個工作,但我認爲文字很聰明。 – idbentley 2011-04-28 21:26:30