[英]Hibernate HQL Query : How to properly use ANY function in where clause?
我正在努力了解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();
}
...注釋掉的行正常工作,但是我希望不起作用的ANY比較的功能為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.QuerySyntaxException:意外令牌::錯誤。
有任何想法嗎? 感謝幫助。
據我所知, = ANY
等同於IN
(我認為優化程序會將它們轉換為相同的查詢)。 從PostgreSQL文檔中:
9.16.4。 任何/某些
expression operator ANY (subquery) expression operator SOME (subquery)
右側是帶括號的子查詢,該查詢必須恰好返回一列。 使用給定的
operator
,將評估左側表達式並將其與子查詢結果的每一行進行比較,該operator
必須產生布爾結果。 如果獲得任何真實結果,則ANY
的結果為“ true”。 如果找不到正確的結果,則結果為“ false”(包括子查詢不返回任何行的特殊情況)。
SOME
是ANY
的同義詞。IN
等於= ANY
。
因此,我認為使用= ANY
不會解決您的問題。
當然,我沒有上下文,但是您確定執行2 ^ 15個以上的OR
比較確實有意義嗎?
不確定要使用“任何”功能而不是“輸入”功能是什么意思。 我認識的每個DBMS都將它們視為同義詞。
= ANY不允許用於MySQL中的列表,僅允許用於子查詢。 從表面上看,您的方言設置為MySQL,而Hibernate知道嗎?
http://dev.mysql.com/doc/refman/5.5/en/any-in-some-subqueries.html
與表達式列表一起使用時,IN和= ANY不是同義詞。 IN可以接受一個表達式列表,但是= ANY不能。 請參見第11.3.2節“比較函數和運算符”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.