我有一个根据某些条件以编程方式供稿的列表,代码如下所示:
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)
因此,只要满足至少一种条件,就可以显示记录
谢谢。
最佳答案
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;
}