1

いくつかの条件に従ってプログラムでフィードされるリストがあります。コードは次のようになります。

 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(...)                
        }                   
    }       

そして、基準を構築するとき、私はこれを行いました:

for (int c = 0; c < restrictionList.size()-1;c++){
    crit.add(Restrictions.or(restrictionList.get(c),restrictionList.get(c+1)));
}

クエリ文字列の where 句は次のようになります。

((A または B) AND (B または C))

構築された句に And があるため、結果の一部が表示されていません

レコードR1、R2、R3があるとしましょう

R1 は条件 A と C を満たします R2 は条件 A を満たします R3 は条件 B と C を満たします

したがって、(A または B) には R1、R2 があり、R3 (B または C) には R1 および R3 があります。

両方の条件が AND でバインドされているため、R2 は最終結果から除外されています。

where句を次のようにするにはどうすればよいですか:

(A または B または C)

そのため、少なくとも 1 つの条件を満たす場合にレコードを表示できます。

ありがとう。

4

1 に答える 1

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;
}  
于 2015-12-10T00:27:26.737 に答える