2017-03-17 1 views
0

제가 여기에서 물어볼 때 포기하기 위해 포기했습니다. 내 목표는 CriteriaBuilder에 의한 데이터베이스 쿼리에서 일부 데이터를 필터링하는 것입니다. 각 Client에는 howMuchOrdersorderTotalValue과 같은 입력란이 있습니다.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)); 

    } 
} 

아무도 도와 줄 수 있습니까?

답변

0

해결책을 찾았습니다! 나는 값이 if 진술처럼 0보다 큰지 알아낼 수 없었지만 SQL 쿼리가 어떻게 보이는지 상상했습니다. 난 그냥 논리적 AND의 경우 orderCount > 0orderValue/order을 확인하는 데 필요한 :) 다음과 같습니다 : 난 그냥 시간 :

필요
predicates.add(builder.and(builder.greaterThan(root.get("orderCount"), 0), 
builder.lessThanOrEqualTo(exQuot, attValue))); 

관련 문제