Frage

Ich möchte alle Objekte laden, die einen Text Tag-Satz zu einem einer kleinen, aber beliebigen Anzahl von Werten aus unserer Datenbank haben. Der logische Weg, um dies in SQL zu gehen wäre eine „IN“ Klausel zu bauen. JPQL ermöglicht IN, aber es scheint mir zu verlangen, jeden einzelnen Parameter IN direkt angeben (wie in "in (: in1,: in2,: in3)").

Gibt es eine Möglichkeit, ein Array zu spezifizieren oder eine Liste (oder ein anderer Behälter), die den Werten einer IN-Klausel abgerollt werden sollte?

War es hilfreich?

Lösung

Ich bin nicht sicher für JPA 1.0, aber Sie können einen Collection in JPA 2.0 übergeben:

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();

assertNotNull(actual);
assertEquals(2, actual.size());

Getestet mit Eclipse. Mit Hibernate 3.5.1, müssen Sie die Parameter mit Klammern umgeben:

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

Aber dies ein Fehler ist, ist die JPQL Abfrage in der vorherige Probe gültig JPQL. Siehe HHH-5126 .

Andere Tipps

Das Orakel Grenze beträgt 1000 Parameter. Das Problem wurde mit der übergebenen Parameterliste in den Sätzen von 500 von Hibernate in Version 4.1.7, obwohl durch die Spaltung aufgelöst sehen JIRA HHH-1123

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top