Conjunction
sと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
addCriterionToJunction
Criterion
関係(<、>、...)と値にJunction
基づいてにを追加するだけです。副作用はありません。