Heim > Datenbank > MySQL-Tutorial > Kann die IN-Klausel von JPQL Sammlungen direkt verarbeiten?

Kann die IN-Klausel von JPQL Sammlungen direkt verarbeiten?

Susan Sarandon
Freigeben: 2024-12-28 19:06:11
Original
940 Leute haben es durchsucht

Can JPQL's IN Clause Handle Collections Directly?

JPQL IN-Klausel: Arrays, Listen und andere Sammlungen abwickeln

In Java Persistence Query Language (JPQL) ermöglicht Ihnen die IN-Klausel um eine Liste spezifischer Werte zum Vergleich anzugeben. Wenn Sie jedoch eine Sammlung von Werten vergleichen müssen, anstatt sie einzeln aufzulisten, fragen Sie sich möglicherweise, ob es in JPQL eine Möglichkeit gibt, dies zu tun.

Antwort:

Ja, in JPA 2.0 und höher können Sie in der IN-Klausel eine Sammlung angeben, die auf ihre einzelnen Werte entrollt werden soll. Um dies zu tun:

  1. Definieren Sie die JPQL-Abfrage: Erstellen Sie eine JPQL-Abfrage mit der IN-Klausel und einem benannten Parameter, zum Beispiel:
String qlString = "select item from Item item where item.name IN :names";
Nach dem Login kopieren
  1. Erstellen Sie eine Sammlung: Erstellen Sie eine Java-Sammlung (z. B. eine Liste oder Set) mit den Werten, gegen die Sie prüfen möchten.
  2. Legen Sie den Parameter fest: Verwenden Sie die setParameter()-Methode für das Query-Objekt, um die Sammlung als Wert für den benannten Parameter zu übergeben:
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);
Nach dem Login kopieren

Beispiel:

Das folgende Beispiel in EclipseLink ruft alle Item-Objekte ab, deren Namen stimmen entweder mit „foo“ oder „bar“ überein:

String qlString = "select item from Item item where item.name IN :names";
Query q = em.createQuery(qlString, Item.class);

List names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());
Nach dem Login kopieren

Hinweis für den Ruhezustand:

Vor Hibernate 4 müssen Sie den Parameter in Klammern einschließen die JPQL-Abfrage:

String qlString = "select item from Item item where item.name IN (:names)";
Nach dem Login kopieren

Dies ist jedoch eine Hibernate-spezifische Erweiterung und nicht Teil des Standards JPQL-Syntax.

Das obige ist der detaillierte Inhalt vonKann die IN-Klausel von JPQL Sammlungen direkt verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage