Ich verwende JPQL-Abfrage, um zu überprüfen, ob die Liste die angegebenen Enum-Werte enthält. Wenn der Enum-Wert ein einzelnes zu überprüfendes Element ist, ist es ziemlich einfach.jpql IN-Abfrage mit Aufzählungswert
In Abfrageausdruck
query = "... where s.status = :status";
und dann den Parameter wie
query.setParameter("status", statusValue);
Aber ich möchte so etwas wie unten
query = "... where s.status IN (:statusList)";
prüfen, wo statusList
ist eine Kette von Zahlen (zB "0,1,2", was bedeutet, dass l ist der Werte des Status)
Aber ich kann keine Lösung finden. Ich habe auch mit s.status.ordinal() IN (statusList)
in Query aber kein Glück überprüft.
Ich bin mit JPA-Implementierung: Eclipse (JPA 2.0)
Meine Entity tatsächliche Name ist 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));
Sie bestehen den Ordinalwert im Gegensatz zu der Zeichenfolge? –
@KevinBowersox: Ja, in der Datenbank habe ich die Ordinalwerte gespeichert und im Frontend stellt Enum diesen Wert dar. – sarwar026
Ich würde empfehlen, den tatsächlichen String des Enums in der Datenbank zu speichern. Wenn sich Ihr Enum ändert, müssen Sie möglicherweise eine Datenanpassung in Ihrer Datenbank vornehmen. –