Ich habe aufgegeben, es herauszufinden, also frage ich hier :) Mein Ziel ist es, einige Daten in der Datenbank-Abfrage von CriteriaBuilder zu filtern. Jede Client
hat Felder wie howMuchOrders
und orderTotalValue
.Persistence CriteriaBuilder - überprüfen, ob größer als 0
Hier versuche ich zu überprüfen, ob mein gegeben atLeastAverageValue
niedriger als averageTotalValueExpression
(berechnet durch orderTotalValue
durch howMuchOrders
Teilung). Am Anfang muss ich überprüfen, ob meine atLeastAverageValue
nicht null ist. Andernfalls möchte ich kein Prädikat zur Liste der ausgeführten Prädikate mit Abfrage hinzufügen.
Alles funktioniert gut, bis root.get("orderCount")
gibt Null (was möglich ist) und es wirft org.springframework.dao.DataIntegrityViolationException
. Ich könnte diese Ausnahme fangen und behandeln, aber es ist nicht die Art, wie ich es machen möchte. Zunächst möchte ich überprüfen, ob der Wert in root.get("orderCount")
nicht null ist. Wenn es nicht ist - berechnen und add prediacte Prädikatsliste. Ansonsten nichts tun.
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));
}
}
Kann jemand helfen?