6
votes

Comment pouvez-vous supprimer un critère des critères?

Par exemple, si je fais quelque chose comme: xxx

Comment puis-je utiliser la même instance de critère, mais supprimer (par exemple) le deuxième critère? J'essaie de créer une requête dynamique dans laquelle je voudrais laisser l'utilisateur retirer un filtre, sans que le backend doive reconstruire les critères de zéro.

merci


0 commentaires

3 Réponses :


6
votes

Autant que je sache, il n'ya aucun moyen de supprimer des objets (restrictions, commander, etc.) à partir de la requête de critère, une fois que vous l'avez créée. Je ne suis pas assez compétent pour les internes de l'API de critères, mais je sais qu'il n'y a rien dans l'interface exposée. Vous pouvez essayer de manipuler les objets que vous passez à Ajouter ou AddArdOrder , mais cela ressemble à plus de travail que ce qu'il vaut, surtout lorsqu'il existe des alternatives plus propres.

Les requêtes de critères ont certainement été utilisées à un coup dans chaque application que j'ai vue.

Maintenant, ce que vous pouvez faire est de stocker vos restrictions, vos commandes et vos limites dans un format personnalisé (E.G., Collection ), puis construisez votre requête assez facilement à partir de ce format stocké. Cela aurait probablement plus de sens pour votre interface utilisateur puisque vous avez certainement besoin d'un contrôle à grain fin de là.

Pas la réponse que vous recherchez, je suis sûr, mais c'est exactement ce que j'ai fait dans le passé.

htth


0 commentaires

1
votes

Comment puis-je utiliser la même instance de critère, mais supprimer (par exemple) le deuxième critère? J'essaie de créer une requête dynamique dans laquelle je voudrais laisser l'utilisateur retirer un filtre, sans que le backend doive reconstruire les critères de zéro.

Vous ne pouvez pas, vous devrez renvoyer l'ensemble de paramètres (mis à jour) utilisé pour créer la requête dynamique.


0 commentaires

1
votes

Vous pouvez supprimer des critères de cette manière:

public static void List<CriterionType> removeCriterions(Criteria criteria, Class<? extends Criterion> type) {
    Iterator<CriterionEntry> criterionIterator = ((CriteriaImpl) criteria).iterateExpressionEntries();
    while (criterionIterator.hasNext()) {
        CriterionEntry criterionEntry = criterionIterator.next();
        if (criterionEntry.getCriteria() == criteria) {
            Criterion criterion = criterionEntry.getCriterion();
            if (null == type || criterion.getClass() == type) {
                criterionIterator.remove();
            }
        }
    }
}


0 commentaires