2015-12-09 1 views
0

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.

+0

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? –

+0

@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

Répondre

3
if (!restrictionList.isEmpty()) { 
    crit.add(or(restrictionList)); 
} 

private Disjunction or(List<Criterion> restrictions) { 
    Disjunction result = Restrictions.disjunction(); 

    for(Criterion restriction : restrictions) { 
     result.add(restriction); 
    } 

    return result; 
} 
+0

Parfait! Merci pour la réponse rapide, il fait exactement ce dont j'ai besoin – rhernandez

+0

@rhernandez Vous êtes les bienvenus. –

+0

Parfait! Je vous remercie –