首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate HQL查询:如何正确使用where子句中的任何函数?

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

Stack Overflow用户
提问于 2010-07-16 16:47:39
回答 2查看 8.4K关注 0票数 5

我很难理解HQL查询中的错误:

代码语言:javascript
复制
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。

有什么想法吗?谢谢你帮忙。

EN

回答 2

Stack Overflow用户

发布于 2010-07-16 21:57:17

据我所知,= ANY等同于IN (我认为它们将被优化器转换成相同的查询)。来自PostgreSQL文档:

9.16.4任何/一些 表达式运算符任何(子查询)表达式运算符一些(子查询) 右边是带括号的子查询,必须准确返回一列.使用给定的operator计算左表达式并将其与子查询结果的每一行进行比较,这必须产生一个布尔结果。如果获得任何真结果,则ANY的结果为" true“。如果没有找到真结果,则结果为"false“(包括子查询不返回任何行的特殊情况)。 SOME是ANY的同义词。IN 等价于 = ANY.

所以我不认为使用= ANY会解决你的问题。

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

票数 3
EN

Stack Overflow用户

发布于 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节,“比较功能和运算符”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3267138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档