Ich arbeite an einer dynamischen Filterkomponente basierend auf QueryDSL mit der Verwendung von SpringData für die Abfrageausführung. So erstelle ich Predicate
Instanzen von der empfangenen Datenanzeige übergeben Sie es an QueryDslPredicateExecutor
. Für den dynamischen Zugriff auf Entitätsattribute verwende ich den generischen Code PathBuilder
, der in die Entitätsklasse eingegeben wurde.Filtern der Sammlung nach mehreren Attributen seiner Elemente - QueryDSL
Betrachten Sie die folgende (vereinfachte) Code:
class Offer {
List<LanguageToName> names;
}
class LanguageToName {
String name;
String language;
}
Wenn ich versuche, Offer
entites abzufragen, die in ihrer Sammlung name
Element mit dem Attribut 'abc' haben, habe ich einfach das Prädikat wie folgt erstellen:
Ich konnte jedoch keine Lösung finden, um die Sammlung nach mehreren Attributen der enthaltenen Objekte mit PathBuilder
zu filtern. Wenn ich den Code oben mit .and()
anhänge und die Sammlung wieder über die Variable pathBuilder
zugreife, bekomme ich natürlich das Ergebnis, das dem Anfügen der sql Abfrage mit AND EXISTS...
entspricht, das nicht das erwünschte Resultat ist. Ich versuchte auch, getCollection().contains()
zu verwenden, aber ich war nicht in der Lage, die Expression<LanguageToName>
zu schaffen, die solchen Fall beschreiben würde.
Gibt es eine Möglichkeit, eine Predicate
zu erstellen, die Entitäten nach mehreren Attributen der Elemente aus einer Auflistung filtern würde, also ein Feld der abgefragten Entität?