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子句中的任何函数?
				
        
 
            
        - 获取数字的最后一位 2022-01-01
 - 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
 - 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
 - 转换 ldap 日期 2022-01-01
 - java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
 - 未找到/usr/local/lib 中的库 2022-01-01
 - Eclipse 的最佳 XML 编辑器 2022-01-01
 - GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
 - 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
 - 如何指定 CORS 的响应标头? 2022-01-01
 
						
						
						
						
						
				
				
				
				