簡體   English   中英

Hibernate HQL查詢:如何在where子句中正確使用ANY函數?

[英]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”(包括子查詢不返回任何行的特殊情況)。

SOMEANY的同義詞。 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.

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