Hibernate HQL查询:如何正确使用WHERE子句中的任何函数?

2022-04-03 00:00:00 java Hibernate hql

我正在努力理解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 已找到(包括特例 其中子查询不返回任何行)。

SOMEANY的同义词。IN为 相当于= ANY

所以我认为使用= ANY无论如何都不会解决您的问题。

当然,我没有上下文,但您确定执行超过2^15OR比较真的有意义吗?

相关文章