gpt4 book ai didi

java - hibernate HQL 查询 : How to properly use ANY function in where clause?

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:53 27 4
gpt4 key购买 nike

我很难理解我在 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 of ANY 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 for ANY. 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com