- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我很难理解我在 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 函数应该工作。在其他论坛问题中,人们说不要使用上面链接中规定的元素函数(我尝试使用元素,但出现 IDENT 错误)。上面的代码产生了一个 org.hibernate.hql.ast.QuerySyntaxException: unexpected token::错误。
有什么想法吗?感谢您的帮助。
最佳答案
据我所知,= ANY
等同于 IN
(我认为优化器会将它们转换为相同的查询)。来自 PostgreSQL 文档:
9.16.4. ANY/SOME
expression operator ANY (subquery)
expression operator SOME (subquery)The right-hand side is a parenthesized subquery, which must return exactly one column. The left-hand expression is evaluated and compared to each row of the subquery result using the given
operator
, which must yield a Boolean result. The result ofANY
is "true" if any true result is obtained. The result is "false" if no true result is found (including the special case where the subquery returns no rows).
SOME
is a synonym forANY
.IN
is equivalent to= ANY
.
所以我不认为使用 = ANY
会解决您的问题。
当然,我没有上下文,但您确定执行超过 2^15 次 OR
比较真的有意义吗?
关于java - hibernate HQL 查询 : How to properly use ANY function in where clause?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267138/
我是一名优秀的程序员,十分优秀!