我正在使用JPQL查询来检查列表是否包含指定的枚举值.如果枚举值是要检查的单个元素,那么它非常简单.
在查询表达式中,
query = "... where s.status = :status";
Run Code Online (Sandbox Code Playgroud)
然后设置参数
query.setParameter("status", statusValue);
Run Code Online (Sandbox Code Playgroud)
但我想检查下面的内容
query = "... where s.status IN (:statusList)";
Run Code Online (Sandbox Code Playgroud)
where statusList是一串数字(例如"0,1,2",表示状态值列表)
但我找不到解决方案.我也s.status.ordinal() IN (statusList)查询过但没有运气.
我正在使用JPA实现:EclipseLink(JPA 2.0)
我的实体的实际名称是 SType
public enum SType
{
REQUISITION,
PURCHASE,
FINISHED,
// others
RETURN;
}
Run Code Online (Sandbox Code Playgroud)
查询:
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));
Run Code Online (Sandbox Code Playgroud)
JB *_*zet 18
您无法将枚举与字符串或整数进行比较.持久字段的类型为Status,它是一个枚举(或者至少,假设类型为Status,因为您没有指定枚举类的名称).
因此,您必须在IN子句中作为集合的参数传递的是Status的集合.例如:
query = "... where s.status IN :statusList";
...
q.setParameter("statusList", EnumSet.of(Status.APPROVED, Status.CLOSED));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12153 次 |
| 最近记录: |