我在使用Conjunction
和Disjunction
時遇到問題。我的程序從ui接收任意數量的過濾元素(每個過濾元素代表一個Criterion
),並打算將它們作爲AND
或OR
鏈接在一起。Hibernate Criteria API的問題(分離和連接)
因此,例如,我可以有3個要素是這樣的(我代表Criterion
以字母):
a OR b AND c
我的代碼如下所示:
// ...
Criteria rootCriteria = createCriteria(entityClass);
Conjunction conjunction = Restrictions.conjunction();
Disjunction disjunction = Restrictions.disjunction();
boolean isFirst = true;
for (InternalFilterElement element : elements) {
if (isFirst) {
isFirst = false;
rootCriteria.add(createCriterion(element.getFilterRelation(), element.getValue()));
} else if (InternalFilterOperand.AND.equals(element.getInternalFilterOperand())) {
addCriterionToJunction(conjunction, element);
} else {
addCriterionToJunction(disjunction, element);
}
}
rootCriteria.add(disjunction);
rootCriteria.add(conjunction);
// ...
我的問題是,我總是得到a AND b AND c
和一些不必要的括號。
我真的很想知道的是,我使用了錯誤的工具來完成這項任務嗎?我該如何混合AND
和OR
運營商?
編輯
InternalFilterOperand
基本上是含有OR
和AND
addCriterionToJunction
一個enum
只是增加了一個Criterion
基於所述關係Junction
(<,>,...)和所述值。它沒有任何副作用。
什麼是'InternalFilterOperand'?你也可以分享你的'addCriterionToJunction'嗎? –