J'utilise Spring Data et JPA dans mon application et j'essaie d'implémenter QueryDSL pour l'API de critères dynamiques. En ce qui concerne si j'envoie des valeurs spécifiques dans les critères, il fonctionne très bien en dessous de prédicats:Création de requêtes à l'aide de mappages de filtres dynamiques dans QueryDSL et de données de ressort JPA
Predicate predicate = QProductInfo.productInfo.shopName.eq(shopName).and(QProductInfo.productInfo.productType.eq(productType));
Mais si je reçois des paramètres de filtre multiples et que vous souhaitez utiliser une carte pour stocker paire clé-valeur de (nom_colonne - column_value) Pour dériver une requête dynamiquement, je ne suis pas en mesure de créer une requête pour la même chose. Moyens Je sais que je peux ajouter autant de condition en utilisant et ou autre opérateur dans Predicate mais exactement combien d'expression j'ai besoin d'utiliser est décidé seulement au moment de l'exécution donc je n'arrive pas à trouver la manière de former l'expression correcte.
filtrer Voici quelques informations de code
@Entity
Public class ProductInfo{
productId;
title;
vendor;
code;
.... and more
}
maintenant peut varier de 1 à n champs avec des valeurs comme filtre 1 = product_id = 123, title = Test filtre 2 = title = xyz, code = abc , vendor = pqr
Donc, je vais utiliser la carte pour stocker la paire clé-valeur (title-xyz et ainsi de suite) et je voudrais construire une requête dynamiquement. Je suis passé par beaucoup de tutoriel mais je n'ai pas trouvé de solution appropriée jusqu'à présent pour mes conditions. J'ai pensé utiliser Switch aussi pendant la boucle d'itération pour la carte, mais comment associer toutes les expressions/prédicats, je n'en ai aucune idée.
Si je ne trouve pas de solution, j'utiliserai probablement l'API JPA Criteria où nous pouvons utiliser la liste des prédicats facilement. Informez-moi s'il y a des informations nécessaires pour m'aider ici.
Merci
Vous pouvez utiliser BooleanBuilder qui implémente Predicate. http://www.querydsl.com/static/querydsl/3.6.3/apidocs/com/mysema/query/BooleanBuilder.html. Si les paramètres proviennent d'une application web Spring, vous pouvez également créer automatiquement le Predicate https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling # querydsl-web-support –
Merci Alan. Je vais essayer d'utiliser BooleanBuilder plus efficacement. Bien que je suspecte toujours comment définir l'attribut d'objet à l'exécution signifie la clé et la valeur les deux arrivent l'heure d'exécution ainsi comment utiliser la clé comme qproductInfo.ProductInfo. .eq (valeur de carte); Je l'essaie et je vais commenter. –
yateen