Hibernate HQL 查询:如何在 where 子句中正确使用 ANY 函数?

shl*_*cee 5 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();
Run Code Online (Sandbox Code Playgroud)

}

...注释掉的行工作正常,但我希望非工作 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:意外令牌::错误。

有任何想法吗?感谢帮助。

Aff*_*ffe 0

不确定你想要“any”而不是“in”的功能是什么意思。我知道的每个 DBMS 都将它们视为同义词。

\n\n

= ANY 不允许用于 MySQL 中的列表,仅适用于子查询。表面上你已经将方言设置为 MySQL 并且 Hibernate 知道这一点?

\n\n

http://dev.mysql.com/doc/refman/5.5/en/any-in-some-subqueries.html

\n\n
\n

当与表达式列表一起使用时,IN 和 = ANY 不是同义词。IN 可以采用表达式列表,但 = ANY\n 不能。请参见第 11.3.2 节,\n \xe2\x80\x9c 比较函数和运算符\xe2\x80\x9d。

\n
\n