本文介紹了Hibernate HQL查詢:如何正確使用WHERE子句中的任何函數(shù)?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我正在努力理解HQL查詢中的錯(cuò)誤:
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(導(dǎo)致PostgreSQL中斷)。
從http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html判斷,any函數(shù)應(yīng)該可以工作。在其他論壇問(wèn)題中,人們說(shuō)不要使用上面鏈接中規(guī)定的Elements函數(shù)(我嘗試過(guò)Elements,但得到了IDENT錯(cuò)誤)。上面的代碼生成一個(gè)org.hibernate.hql.ast.QuerySynaxException:意外Token::Error。
有什么想法嗎?感謝您的幫助。
推薦答案
據(jù)我所知,= ANY
等同于IN
(我認(rèn)為優(yōu)化器會(huì)將它們轉(zhuǎn)換為相同的查詢)。來(lái)自PostgreSQL文檔:
9.16.4. ANY/SOME
expression operator ANY (subquery) expression operator SOME (subquery)
右側(cè)是一個(gè)圓括號(hào)
子查詢,它必須完全返回
只有一欄。左手的表情
被計(jì)算并與每一行進(jìn)行比較
使用子查詢結(jié)果的
operator
,它必須產(chǎn)生一個(gè)布爾值
結(jié)果。ANY
的結(jié)果為”真”
如果得到了任何真實(shí)的結(jié)果。這個(gè)
如果沒(méi)有TRUE結(jié)果,則結(jié)果為”FALSE
已找到(包括特例
其中子查詢不返回任何行)。
SOME
是ANY
的同義詞。IN
為
相當(dāng)于= ANY
。
所以我認(rèn)為使用= ANY
無(wú)論如何都不會(huì)解決您的問(wèn)題。
當(dāng)然,我沒(méi)有上下文,但您確定執(zhí)行超過(guò)2^15OR
比較真的有意義嗎?
這篇關(guān)于Hibernate HQL查詢:如何正確使用WHERE子句中的任何函數(shù)?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,