J'ai une liste qui soutire programme selon certaines conditions, le code ressemble à ceci:Mise en veille prolongée Générer une requête de la liste <Criterion> avec ou opérateurs et restrictions dynamiques
List<Criterion> restrictionList = new ArrayList<Criterion>();
for(int i = 1; i<someconditions.length);i++){
if(condition1){
restrictionList.add(...);
} else if(condition2){
restrictionList.add(...)
} else if(condition3){
restrictionList.add(...)
}
}
Et lors de la construction des critères, je l'ai fait :
for (int c = 0; c < restrictionList.size()-1;c++){
crit.add(Restrictions.or(restrictionList.get(c),restrictionList.get(c+1)));
}
la clause where dans la chaîne de requête recherche:
((A ou B) et (B ou C))
car il y a une Et dans la clause construite, certains des résultats ne sont pas montrant
Disons que je les enregistrements R1, R2 et R3
R1 satisfait aux conditions A et C R2 répond à la condition A R3 répond à la condition B et C
So (a ou B) a R1, R2 et R3 (B ou C) a R1 et R3
Puisque les deux conditions sont liées par un eT, R2 est omis du résultat final
Comment puis-je faire faire la clause where pour ressembler à:
(A ou B ou C)
Ainsi, les enregistrements peuvent être affichés quand ils se rencontrent au moins une condition
Merci.
Désolé, mais quelles sont vos questions? A propos de "certains des résultats ne montrent pas" - pouvez-vous donner un exemple quel spectacle et quoi pas? –
@ViacheslavVedenin Désolé, je n'étais pas assez clair. J'ai édité la question avec plus de détails, laissez-moi savoir si vous avez besoin d'autres précisions. – rhernandez