我使用JPQL查询来检查列表是否包含指定的枚举值。如果枚举值是要检查的单个元素,那么它非常简单。
在查询表达式中,
query = "... where s.status = :status";然后设置参数,如
query.setParameter("status", statusValue);,但我想检查一下下面的内容
query = "... where s.status IN (:statusList)";其中statusList是一个数字字符串(例如,"0,1,2“,即状态值的列表)。
但我找不到解决办法。我还在查询中使用s.status.ordinal() IN (statusList)进行了检查,但没有取得任何进展。
我正在使用JPA实现: EclipseLink (JPA2.0)
我的实体的真实名称是SType
public enum SType
{
REQUISITION,
PURCHASE,
FINISHED,
// others
RETURN;
}查询:
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));发布于 2013-06-02 08:55:48
不能将枚举与字符串或整数进行比较。持久化字段的类型是Status,这是一个enum (或者至少让我们假设类型是Status,因为您没有指定enum类的名称)。
因此,您必须在IN子句中作为集合的参数传递状态集合。例如:
query = "... where s.status IN :statusList";
...
q.setParameter("statusList", EnumSet.of(Status.APPROVED, Status.CLOSED));https://stackoverflow.com/questions/16881151
复制相似问题