요구 사항 : 초기 조건이 있습니다. 즉, P1은 술어입니다. 데이터베이스 테이블에 null 일 수있는 날짜 필드가 있습니다. 그것이 널 (null)이면, 초기 술어 자체를 진행할 수 있습니다. 그것이 널이 아닌 경우, 해당 필드의 값은 지정된 날짜 사이에 있어야합니다.JPA의 복합 술부 Criteria Query - and와 or를 모두 사용합니다.
Approach1 : 내 검색어에 '및' '또는'조건을 모두 사용하려고합니다. 문제는 술어의 조합에 있습니다.
Predicate P1 = criteriaBuilder.equal(a,b);
Predicate P2 = criteriaBuilder.isNull(myDate);
Predicate P3 = criteriaBuilder.isNotNull(myDate);
Predicate P4 = criteriaBuilder.between(currentDate,previousDate);
Predicate P34 = criteriaBuilder.and(P3,P4);
Predicate P234 = criteriaBuilder.or(P2,P34);
Predicate P1234 = criteriaBuilder.and(P1,P234);
criteriaBuilder.where(P1234);
쿼리
예상 조건 : P1 AND (P2 OR (P3 및 P4)) 쿼리
실태 : P1 및 P2 또는 P3 및 P4
하여 추정 : 일부 수학 사용 집합론 대괄호를 확장하십시오.
쿼리예상 조건
Predicate P12 = criteriaBuilder.and(P1,P2);
Predicate P34 = criteriaBuilder.and(P3,P4);
Predicate P134 = criteriaBuilder.and(P1,P34);
Predicate P12134 = criteriaBuilder.or(P12,P134);
criteriaBuilder.where(P12134);
(P1 및 P2) OR (P1 및 P3 및 P4) 쿼리
실태 : P1 및 P2 OR P1 및 P3 및 예약 P4
양 접근 방법 나는 괄호가 빠져있다. 이 대괄호를 가져 오는 방법을 제안하십시오. 요구 사항을 충족시키기위한 더 나은 접근 방법이 있습니까 ??
황소 눈 ... 감사 @Robby 코넬리을 ..하지만 난으로 생각 접근 방식 1 : 예상과 실제는 귀하의 설명과 동일한 결과를 산출하지 않습니다. 그러나, 나는 내가 찾고 있었던 것을 얻었다. – tortoise