我正在使用JPQL查詢來檢查列表是否包含指定的枚舉值。如果枚舉值是一個單獨的元素來檢查,那麼它非常簡單。帶有枚舉值的jpql IN查詢
在查詢表達式,
query = "... where s.status = :status";
,然後設置參數一樣
query.setParameter("status", statusValue);
但我要檢查類似下面
query = "... where s.status IN (:statusList)";
其中statusList
是一串數字(例如「0,1,2」表示l ist的狀態值)
但我找不到解決方案。我也查詢了s.status.ordinal() IN (statusList)
查詢但沒有運氣。
我使用JPA實施:的EclipseLink(JPA 2.0)
我的實體的實際名稱是SType
public enum SType
{
REQUISITION,
PURCHASE,
FINISHED,
// others
RETURN;
}
QUERY:
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));
您是否堅持序號值而不是字符串? –
@KevinBowersox:是的,在數據庫中,我存儲了序數值,並在前端,Enum表示該值。 – sarwar026
我會建議在數據庫中存儲枚舉的實際字符串。如果你的枚舉改變了,你可能需要在你的數據庫中進行一些數據調整。 –