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)

因此,当满足至少一个条件时,可以显示记录

谢谢。

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 回答