제가 여기에서 물어볼 때 포기하기 위해 포기했습니다. 내 목표는 CriteriaBuilder에 의한 데이터베이스 쿼리에서 일부 데이터를 필터링하는 것입니다. 각 Client
에는 howMuchOrders
및 orderTotalValue
과 같은 입력란이 있습니다.Persistance 's CriteriaBuilder - 0보다 큰지 확인하십시오.
여기 내 atLeastAverageValue
을보다 낮은 averageTotalValueExpression
되어 주어진 (howMuchOrders
에 의해 orderTotalValue
를 나누어 계산) 여부를 확인하려고합니다. 매우 처음에 나는 내 atLeastAverageValue
이 null이 아닌지 확인해야합니다. 그렇지 않으면 쿼리와 함께 실행 된 조건 자 목록에 조건자를 추가하고 싶지 않습니다.
root.get("orderCount")
이 0이 될 때까지 모든 것이 잘 작동하고 org.springframework.dao.DataIntegrityViolationException
을 던집니다. 이 예외를 잡아서 처리 할 수는 있지만 그렇게하는 것이 아닙니다. 먼저 root.get("orderCount")
의 값이 null이 아닌지 확인하고 싶습니다. 그렇지 않은 경우 - 계산하여 prediacte를 술어 목록에 추가하십시오. 그렇지 않으면 아무 것도하지 않습니다.
private void addMaxAveragePredicate(BigDecimal atLeastAverageValue, List<Predicate> predicates, CriteriaBuilder builder, Root<?> root) {
if (atLeastAverageValue!=null) {
Expression averageTotalValueExpression = builder.quot(root.get("orderCount"), root.get("orderTotalValue")).as(BigDecimal.class);
predicates.add(builder.lessThanOrEqualTo(averageTotalValueExpression, atLeastAverageValue));
}
}
아무도 도와 줄 수 있습니까?