如果成员值位于值集合中,如何使用 JPQL 查找

发布于 2024-11-17 20:49:42 字数 610 浏览 2 评论 0原文

我有一个对象,其中的成员是枚举,我想编写一个查询,返回该成员位于值列表中的所有元素。因此,我编写了以下 JQP 查询

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from "+MyBean.TABLE+" t where t.status member of :statuses"),
class MyBean {
     @Enumerated(EnumType.STRING)
     private MyEnum status;
}

,我尝试使用以下 EJB 代码来获取它

    Query findByStatuses = getEntityManager().createNamedQuery(MyBean.FIND_BY_STATUSES);
    findByStatuses.setParameter("statuses", Arrays.asList(statuses));
    return findByStatuses.getResultList();

。不幸的是,Glassfish 不断地告诉我我错了(显然,我错了)。 但我必须解决什么问题呢?又如何?

I have an object in which a member is an enum, and I want to write a query returning all elements for which that member is in a list of values. So, I've written the following JQP query

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from "+MyBean.TABLE+" t where t.status member of :statuses"),
class MyBean {
     @Enumerated(EnumType.STRING)
     private MyEnum status;
}

That I try to get using the following EJB code

    Query findByStatuses = getEntityManager().createNamedQuery(MyBean.FIND_BY_STATUSES);
    findByStatuses.setParameter("statuses", Arrays.asList(statuses));
    return findByStatuses.getResultList();

Unfortunatly, Glassfish endlessly tells me I'm wrong (which I am, obviously).
But what do I have to fix ? and how ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南渊 2024-11-24 20:49:42

首先,您的查询引用表名,因此它尝试使用 SQL 类型,但数据库可能没有适合这种使用的“MEMBER OF”运算符,所以让我们尝试使用 JPQL。在那里我们不能使用 MEMBER OF,因为它接受路径表达式作为参数,而这不是我们在 setParameter 中提供的。相反,我们使用 IN:

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from MyBean t where t.status in(:statuses)")

无需修改运行查询的部分。

First your query references to table name, so it tries to be kind of SQL, but maybe database does not have "MEMBER OF"-operator which would be suitable for this kind of use, so let's try with JPQL. There we cannot use MEMBER OF, because it takes path expression as an argument, and that is not what we provide in setParameter. Instead we use IN:

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from MyBean t where t.status in(:statuses)")

No need to modify part where you run query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文