Persistance 的 CriteriaBuilder - 检查是否大于 0
Persistance's CriteriaBuilder - check if greater than 0
我放弃了尝试弄明白,所以我在这里问 :) 我的目标是通过 CriteriaBuilder 过滤数据库查询中的一些数据。每个 Client
都有像 howMuchOrders
和 orderTotalValue
.
这样的字段
这里我尝试检查我给定的 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 > 0
和 orderValue/order
是否符合逻辑 AND
:) 看起来像这样:
predicates.add(builder.and(builder.greaterThan(root.get("orderCount"), 0),
builder.lessThanOrEqualTo(exQuot, attValue)));
我只是需要一些时间:)
我放弃了尝试弄明白,所以我在这里问 :) 我的目标是通过 CriteriaBuilder 过滤数据库查询中的一些数据。每个 Client
都有像 howMuchOrders
和 orderTotalValue
.
这里我尝试检查我给定的 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 > 0
和 orderValue/order
是否符合逻辑 AND
:) 看起来像这样:
predicates.add(builder.and(builder.greaterThan(root.get("orderCount"), 0),
builder.lessThanOrEqualTo(exQuot, attValue)));
我只是需要一些时间:)