Java 持久性';s CriteriaBuilder-检查是否大于0

Java 持久性';s CriteriaBuilder-检查是否大于0,java,spring,hibernate,criteria,Java,Spring,Hibernate,Criteria,我放弃了试图找出答案,所以我在这里问:)我的目标是通过CriteriaBuilder过滤数据库查询中的一些数据。每个Client都有类似howmochorders和orderTotalValue的字段 在这里,我尝试检查给定的atLeastAverageValue是否低于averageTotalValueExpression(通过将orderTotalValue除以Howmounters计算)。在开始时,我需要检查我的atLeastAverageValue是否为空。否则,我不想将谓词添加到带有查

我放弃了试图找出答案,所以我在这里问:)我的目标是通过CriteriaBuilder过滤数据库查询中的一些数据。每个
Client
都有类似
howmochorders
orderTotalValue
的字段

在这里,我尝试检查给定的
atLeastAverageValue
是否低于
averageTotalValueExpression
(通过将
orderTotalValue
除以
Howmounters
计算)。在开始时,我需要检查我的
atLeastAverageValue
是否为空。否则,我不想将谓词添加到带有查询的已执行谓词列表中

一切正常,直到
root.get(“orderCount”)
给出零(这是可能的),并抛出
org.springframework.dao.DataIntegrityViolationException
。我可以捕获并处理这个异常,但这不是我喜欢的方式。首先,我想检查
root.get(“orderCount”)
中的值是否不为null。如果不是-计算并将predicte添加到谓词列表中。否则什么也不做

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));

    }
}
private void addMaxAveragePredicate(BigDecimal atLeastAverageValue、列表谓词、CriteriaBuilder、根){
如果(至少平均值!=null){
表达式averageTotalValueExpression=builder.quot(root.get(“orderCount”)、root.get(“orderTotalValue”)).as(BigDecimal.class);
add(builder.lessThanOrEqualTo(averageTotalValueExpression,至少AverageValue));
}
}

有人能帮忙吗?

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

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

我只需要一些时间:)

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

predicates.add(builder.and(builder.greaterThan(root.get("orderCount"), 0), 
builder.lessThanOrEqualTo(exQuot, attValue)));
我只是需要一些时间:)