Hinzufügen der IN-Klauselliste zu einer JPA-Abfrage
Ich gebaut habe, eine NamedQuery, die wie folgt aussieht:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Was ich will zu tun ist, füllen Sie die parameter :inclList mit einer Liste der Elemente, anstelle von einem Punkt. Zum Beispiel, wenn ich ein new List<String>() { "a", "b", "c" }
wie Schaffe ich es, dass in der :inclList parameter? Es läßt mich nur Verschlüssele einer Zeichenkette. Zum Beispiel:
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 erstellen Sie eine Zeichenfolge, und bauen die gesamte Abfrage aus, aber ich wollte, den overhead zu vermeiden. Gibt es einen besseren Weg, dies zu tun?
Verwandte Frage: wenn die Liste sehr groß ist, ist es eine gute Möglichkeit, das Gebäude Abfrage wie?
InformationsquelleAutor der Frage AlanObject | 2010-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei der Verwendung
IN
mit einer Sammlung geschätzte parameter, die Sie nicht brauchen(...)
:InformationsquelleAutor der Antwort axtavt
Den richtigen JPA query format wäre:
Wenn Sie eine ältere version von Hibernate, als Ihr Anbieter, die Sie schreiben müssen:
aber das ist ein bug (HHH-5126) (EDIT: das wurde gelöst, indem nun).
InformationsquelleAutor der Antwort Jose Ferrer
Funktioniert bei mir mit JPA 2, Jboss 7.0.2
InformationsquelleAutor der Antwort user1114134
Müssen Sie Sie konvertieren, um
List
wie unten gezeigt:InformationsquelleAutor der Antwort Wesley Rocha