使用 or 运算符和动态限制从 List<Criterion> 构建 Hibernate 查询
Hibernate build query from List<Criterion> with or operators and dynamic Restrictions
我有一个根据某些条件以编程方式提供的列表,代码如下所示:
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;
}
我有一个根据某些条件以编程方式提供的列表,代码如下所示:
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;
}