【发布时间】:2017-03-17 17:54:30
【问题描述】:
我放弃了试图弄清楚,所以我在这里问:) 我的目标是通过 CriteriaBuilder 过滤数据库查询中的一些数据。每个Client 都有howMuchOrders 和orderTotalValue 等字段。
在这里我尝试检查我给定的atLeastAverageValue 是否低于averageTotalValueExpression(通过将orderTotalValue 除以howMuchOrders 计算得出)。一开始我需要检查我的atLeastAverageValue 是否不为空。否则我不想通过查询将谓词添加到执行的谓词列表中。
在root.get("orderCount") 给出零(这是可能的)并抛出org.springframework.dao.DataIntegrityViolationException 之前一切正常。我可以捕捉并处理这个异常,但这不是我喜欢的方式。首先,我想检查root.get("orderCount") 中的值是否不为空。如果不是 - 计算并将谓词添加到谓词列表中。否则什么都不做。
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));
}
}
谁能帮忙?
【问题讨论】:
标签: java spring hibernate criteria