Verwendung von QueryDSL zum dynamischen Erstellen und Ketten von Prädikaten.Dynamische Prädikatsverkettung QueryDSL
Ich habe eine Benutzeroberfläche mit einer Datentabelle. Jede Spalte enthält ein Feld, in das Sie einen Filterbegriff eingeben können. Wie so:
Im Beispiel oben eventno filter = "0288" und Adressfilter = "Laufwerk". Diese werden dann von der Benutzeroberfläche an das Back-End in einem Paginierungsobjekt gesendet, das eine Zuordnung von Spaltennamen und Filterzeichenfolgen enthält. Wie so:
In meinem Backend mit QueryDSL muß ich jetzt dynamisch ein Prädikat Konstrukt basiert auf den Bedingungen für die Spalten vorgesehen. Ich habe versucht, dies nur für die Adresse Ereignis und Adresse Spalte, aber es scheint nicht beide zu filtern.
public Page<EpisodeDashboard> getPage(int pageNumber, int pageSize, Sort sort, PaginationCriteria pagination) {
BooleanBuilder where = new BooleanBuilder();
if (pagination.getFilterBy().getMapOfFilters().get("eventno")!=null) {
where.and(qEpisode.eventno.containsIgnoreCase(pagination.getFilterBy().getMapOfFilters().get("eventno")));
}
if (pagination.getFilterBy().getMapOfFilters().get("address")!=null) {
where.and(qEpisode.address.formattedAddress.containsIgnoreCase(pagination.getFilterBy().getMapOfFilters().get("address")));
}
List<Episode> e = episodeRepository.findAll(where);
Ich möchte wahrscheinlich etwas mit einem für jeden Schlüssel/Wert in der Hashmap, um die Prädikate dynamisch zu konstruieren.
Was meinst du mit "scheint nicht"? Haben Sie die Protokollierung der generierten SQL-Anweisungen aktiviert, um zu sehen, was passiert? – Brian