Persistance 的 CriteriaBuilder - 检查是否大于 0

Persistance's CriteriaBuilder - check if greater than 0

我放弃了尝试弄明白,所以我在这里问 :) 我的目标是通过 CriteriaBuilder 过滤数据库查询中的一些数据。每个 Client 都有像 howMuchOrdersorderTotalValue.

这样的字段

这里我尝试检查我给定的 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));

    }
}

有人能帮忙吗?

找到解决方案!我无法像 if 语句中那样查明该值是否大于 0,但我想象了 sql 查询的外观。我只需要检查 orderCount > 0orderValue/order 是否符合逻辑 AND :) 看起来像这样:

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

我只是需要一些时间:)