首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有枚举值的查询中的jpql

带有枚举值的查询中的jpql
EN

Stack Overflow用户
提问于 2013-06-02 08:41:39
回答 1查看 18.2K关注 0票数 16

我使用JPQL查询来检查列表是否包含指定的枚举值。如果枚举值是要检查的单个元素,那么它非常简单。

在查询表达式中,

代码语言:javascript
复制
query = "... where s.status = :status";

然后设置参数,如

代码语言:javascript
复制
query.setParameter("status", statusValue);

,但我想检查一下下面的内容

代码语言:javascript
复制
query = "... where s.status IN (:statusList)";

其中statusList是一个数字字符串(例如,"0,1,2“,即状态值的列表)。

但我找不到解决办法。我还在查询中使用s.status.ordinal() IN (statusList)进行了检查,但没有取得任何进展。

我正在使用JPA实现: EclipseLink (JPA2.0)

我的实体的真实名称是SType

代码语言:javascript
复制
public enum SType
{
    REQUISITION,
    PURCHASE,   
    FINISHED,   
    // others
    RETURN;
}

查询:

代码语言:javascript
复制
String querySt = "select s.slipType.slipNameSt,s.slipNumberSt, s.idNr from Slip s 
where s.slipType.sType IN (:enumTypeListt)";

em.createQuery(querySt).setParameter("enumTypeList", EnumSet.of(SType.REQUISITION, 
                                                                SType.PURCHASE));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-02 08:55:48

不能将枚举与字符串或整数进行比较。持久化字段的类型是Status,这是一个enum (或者至少让我们假设类型是Status,因为您没有指定enum类的名称)。

因此,您必须在IN子句中作为集合的参数传递状态集合。例如:

代码语言:javascript
复制
query = "... where s.status IN :statusList";
...
q.setParameter("statusList", EnumSet.of(Status.APPROVED, Status.CLOSED));
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16881151

复制
相关文章

相似问题

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