Ich habe eine NamedQuery erstellt, die so aussieht:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Ich möchte den Parameter: includeList mit einer Liste von Elementen anstelle eines Elements ausfüllen. Wenn ich zum Beispiel eine habe, new List<String>() { "a", "b", "c" }
wie erhalte ich das im Parameter: inclList? Ich kann nur eine Zeichenfolge codieren. Beispielsweise:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Ich weiß, ich könnte einfach einen String erstellen und daraus die gesamte Abfrage erstellen, aber ich wollte den Overhead vermeiden. Gibt es einen besseren Weg, dies zu tun?
Verwandte Frage: Wenn die Liste sehr groß ist, gibt es eine gute Möglichkeit, eine solche Abfrage zu erstellen?
Antworten:
Bei Verwendung
IN
mit einem Parameter mit Sammlungswert benötigen Sie nicht(...)
:quelle
Das richtige JPA-Abfrageformat wäre:
Wenn Sie eine ältere Version von Hibernate als Provider verwenden, müssen Sie Folgendes schreiben:
aber das ist ein Fehler ( HHH-5126 ) (EDIT: der inzwischen behoben wurde).
quelle
Funktioniert für mich mit JPA 2, Jboss 7.0.2
quelle
Sie müssen
List
wie folgt konvertieren :quelle