Conjunction
및 Disjunction
을 사용하는 데 문제가 있습니다. 내 프로그램은 ui에서 임의의 수의 필터 요소 (각각 Criterion
을 나타냄)를 수신하고 함께 연결하기 위해 AND
또는 OR
으로 지정됩니다.최대 절전 기준 API (분리 및 결합) 문제
a OR b AND c
내 코드는 다음과 같습니다 :
그래서 예를 들어 나는 (내가 편지와Criterion
를 나타냅니다)이 추천 요소를 가질 수
// ...
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
및
addCriterionToJunction
AND
함유 enum
단지 추가 관계에 기초 Junction
(<>, ...) 및 값에 Criterion
. 부작용이 없습니다.
'InternalFilterOperand'란 무엇입니까? 또한'addCriterionToJunction'을 공유 할 수 있습니까? –