Ich verwende Spring Data und JPA in meiner Anwendung und ich versuche, QueryDSL für dynamische Kriterien API zu implementieren. Soweit, wenn ich bestimmte Werte in Kriterien senden, es funktioniert gut unter Prädikat mit:Abfrageerstellung mit dynamischer Filterzuordnung in QueryDSL und Federdaten JPA
Predicate predicate = QProductInfo.productInfo.shopName.eq(shopName).and(QProductInfo.productInfo.productType.eq(productType));
Aber wenn ich mehrere Filterparameter empfangen und eine Karte verwenden möchten Schlüssel-Wert zu speichern Paar (column_name - spalten) Um eine Abfrage dynamisch abzuleiten, kann ich keine Abfrage für dieselbe erstellen. Bedeutet, ich weiß, ich kann so viele Bedingungen mit und oder anderen Operator in Prädikat hinzufügen, aber genau, wie viele Ausdruck ich brauche, wird nur zur Laufzeit entschieden, so dass nicht in der Lage, den richtigen Ausdruck zu bilden. Hier
ist einige Code-Informationen
@Entity
Public class ProductInfo{
productId;
title;
vendor;
code;
.... and more
}
Jetzt filtern kann von 1 bis n Felder mit Werten variieren wie Filter 1 = product_id = 123, title = Test Filter 2 = title = xyz, code = abc , vendor = pqr
Also werde ich verwenden, um Schlüssel-Wert-Paar (title-xyz und so weiter) zu speichern und möchte Abfrage dynamisch erstellen.
Ich ging durch viele Tutorials, konnte aber bisher keine passende Lösung für meine Bedingungen finden. Ich dachte an die Verwendung von Switch, während ich die Schleife für die Map wiederhole, aber wie man alle Ausdrücke/Prädikate koppelt, ich bekomme keine Ahnung.
Wenn ich keine Lösung finde, werde ich wahrscheinlich JPA Criteria API verwenden, wo wir die Liste der Prädikate einfach verwenden können. Lassen Sie mich wissen, ob irgendwelche Informationen erforderlich sind, um mir hier zu helfen.
Dank
Sie können BooleanBuilder verwenden, der Prädikat implementiert. http://www.querydsl.com/static/querydsl/3.6.3/apidocs/com/mysema/query/BooleanBuilder.html. Wenn die Parameter von einer Spring-Web-App stammen, können Sie das Prädikat automatisch erstellen lassen https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling # querydsl-web-support –
Danke Alan. Ich werde versuchen, BooleanBuilder effizienter zu verwenden. Obwohl ich immer noch den Verdacht habe, wie man das Objektattribut zur Laufzeit setzt, bedeutet dies, dass Schlüssel und Wert beide zur Laufzeit kommen, also wie man den Schlüssel als qproductInfo.ProductInfo verwendet. .eq (map value); Ich versuche es und werde zurück kommentieren. –
yateen