本文介紹了Hibernate HQL查詢:如何正確使用WHERE子句中的任何函數?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在努力理解HQL查詢中的錯誤:
public List<Pats> getIds(List<String> patIds) {
Session session = getSession();
String hql = "from OurPats where patId = any (:patIds)";
// String hql = "from OurPats where patId in (:patIds)";
return session.createQuery(hql).setParameterList("patIds", patIds).list();
}
…注釋掉的行可以正常工作,但我希望不工作的任何比較的功能作為patIds.size()可以大于2^15(導致PostgreSQL中斷)。
從http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html判斷,any函數應該可以工作。在其他論壇問題中,人們說不要使用上面鏈接中規定的Elements函數(我嘗試過Elements,但得到了IDENT錯誤)。上面的代碼生成一個org.hibernate.hql.ast.QuerySynaxException:意外Token::Error。
有什么想法嗎?感謝您的幫助。
推薦答案
據我所知,= ANY
等同于IN
(我認為優化器會將它們轉換為相同的查詢)。來自PostgreSQL文檔:
9.16.4. ANY/SOME
expression operator ANY (subquery) expression operator SOME (subquery)
右側是一個圓括號
子查詢,它必須完全返回
只有一欄。左手的表情
被計算并與每一行進行比較
使用子查詢結果的
operator
,它必須產生一個布爾值
結果。ANY
的結果為”真”
如果得到了任何真實的結果。這個
如果沒有TRUE結果,則結果為”FALSE
已找到(包括特例
其中子查詢不返回任何行)。
SOME
是ANY
的同義詞。IN
為
相當于= ANY
。
所以我認為使用= ANY
無論如何都不會解決您的問題。
當然,我沒有上下文,但您確定執行超過2^15OR
比較真的有意義嗎?
這篇關于Hibernate HQL查詢:如何正確使用WHERE子句中的任何函數?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,