【问题标题】:Persistance's CriteriaBuilder - check if greater than 0Persistance 的 CriteriaBuilder - 检查是否大于 0
【发布时间】:2017-03-17 17:54:30
【问题描述】:

我放弃了试图弄清楚,所以我在这里问:) 我的目标是通过 CriteriaBuilder 过滤数据库查询中的一些数据。每个Client 都有howMuchOrdersorderTotalValue 等字段。

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


    【解决方案1】:

    找到了解决方案!我无法确定该值是否像if 语句中那样大于 0,但我想象 sql 查询的外观。我只需要检查orderCount &gt; 0orderValue/order 在逻辑AND 中是否如下所示:

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

    我只是需要一些时间:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2023-03-07
      • 2019-06-11
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多