Hibernate HQL Query : How to properly use ANY function in where clause?(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子句中的任何函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Hibernate HQL查询:如何正确使用WHERE子句中的任何函数?
基础教程推荐
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01