JPQL IN-Klausel für Sammlungen
Beim Abrufen von Daten basierend auf einer Reihe von Werten mithilfe einer IN-Klausel in SQL ist es praktisch, eine zu übergeben Array oder eine Sammlung als zu prüfende Werte. JPQL unterstützt auch die IN-Klausel, erfordert jedoch zunächst die individuelle Angabe jedes Parameters (z. B. „in (:in1, :in2, :in3)“).
Lösung für JPA 2.0 und höher
In JPA 2.0 und höher ist es möglich, eine Sammlung als Parameter an die IN-Klausel zu übergeben. Hier ist ein Beispiel:
String qlString = "select item from Item item where item.name IN :names"; Query q = em.createQuery(qlString, Item.class); List<String> names = Arrays.asList("foo", "bar"); q.setParameter("names", names); List<Item> actual = q.getResultList();
Umgang mit Sammlungen in Hibernate 3.5.1 und früher
Für Hibernate 3.5.1 und früher gibt es eine kleine Besonderheit bei der Verwendung einer Sammlung Parameter in der IN-Klausel. Die folgende JPQL-Abfrage ist gültig:
String qlString = "select item from Item item where item.name IN :names";
Hibernate verarbeitet diese Syntax jedoch nicht korrekt. Um dieses Problem zu umgehen, setzen Sie den Parameter in Klammern:
String qlString = "select item from Item item where item.name IN (:names)";
Diese Inkonsistenz wird als HHH-5126 verfolgt.
Das obige ist der detaillierte Inhalt vonWie kann ich die IN-Klausel von JPQL effektiv mit Sammlungen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!