我放弃了试图找出它,所以我问这里:)我的目标是过滤CriteriaBuilder数据库查询中的一些数据。每个Client
具有像howMuchOrders
和orderTotalValue
的字段。Persistance's CriteriaBuilder - 检查是否大于0
这里我试着检查我给出的atLeastAverageValue
是否低于averageTotalValueExpression
(通过orderTotalValue
除以howMuchOrders
计算)。在刚开始时,我需要检查我的atLeastAverageValue
是否不为空。否则,我不想使用查询将谓词添加到已执行的谓词列表中。
一切工作正常,直到root.get("orderCount")
给零(这是可能的),它会抛出org.springframework.dao.DataIntegrityViolationException
。我可以捕捉并处理这个异常,但这不是我喜欢这样做的方式。首先,我想查看root.get("orderCount")
中的值是否为空。如果不是 - 计算并添加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));
}
}
任何人都可以帮忙吗?