我很难理解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();}
...the注释行正常工作,但我希望不工作的任何比较的功能,因为patIds.size()可能大于2^15 (导致postgresql中断)。
从http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html判断,任何函数都应该工作。在其他论坛问题中,人们说不像上面的链接所规定的那样使用元素函数(我尝试过使用元素,我得到了一个IDENT错误)。上面的代码生成一个org.hibernate.hql.ast.QuerySyntaxException:意外令牌::error。
有什么想法吗?谢谢你帮忙。
发布于 2010-07-16 21:57:17
据我所知,= ANY等同于IN (我认为它们将被优化器转换成相同的查询)。来自PostgreSQL文档:
9.16.4任何/一些 表达式运算符任何(子查询)表达式运算符一些(子查询) 右边是带括号的子查询,必须准确返回一列.使用给定的
operator计算左表达式并将其与子查询结果的每一行进行比较,这必须产生一个布尔结果。如果获得任何真结果,则ANY的结果为" true“。如果没有找到真结果,则结果为"false“(包括子查询不返回任何行的特殊情况)。SOME是ANY的同义词。IN等价于= ANY.
所以我不认为使用= ANY会解决你的问题。
当然,我没有上下文,但是您确定执行2^15以上的OR比较真的有意义吗?
发布于 2010-07-16 17:05:23
不清楚你想要“任意”而不是“in.‘”的功能是什么意思。我认识的每一个DBMS都把它们当作同义词。
= MySQL中的列表不允许使用,只允许用于子查询。表面上,您的方言设置为MySQL,Hibernate知道这一点吗?
http://dev.mysql.com/doc/refman/5.5/en/any-in-some-subqueries.html
IN = ANY在与表达式列表一起使用时不是同义词。IN可以取一个表达式列表,但是=任何不能。见第11.3.2节,“比较功能和运算符”。
https://stackoverflow.com/questions/3267138
复制相似问题