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
比较真的有意义吗?
相关文章