Conjunctionsとsの使用に問題がありDisjunctionます。私のプログラムは、UIから任意の数のフィルター要素(それぞれがを表すCriterion)を受け取り、それらをまたはとしてチェーンすることを目的としていANDますOR。
したがって、たとえば、次のような3つの要素を持つことができます(私はaCriterionを文字で表します)。
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基本的にenum含むORとAND
addCriterionToJunctionCriterion関係(<、>、...)と値にJunction基づいてにを追加するだけです。副作用はありません。