私はここで質問するので、それを理解しようとしました。私の目標は、CriteriaBuilderによるデータベースクエリの一部のデータをフィルタリングすることです。各Client
には、howMuchOrders
とorderTotalValue
のようなフィールドがあります。ここでPersistanceのCriteriaBuilder - 0より大きいかどうかを確認する
私は私のatLeastAverageValue
与えられたが、(howMuchOrders
でorderTotalValue
を除して算出)averageTotalValueExpression
未満であるかどうかをチェックしてみてください。非常に初めに私はatLeastAverageValue
がヌルでないかどうか確認する必要があります。それ以外の場合は、クエリで実行された述語のリストに述語を追加したくありません。
root.get("orderCount")
が0になるまですべてうまく動作し、org.springframework.dao.DataIntegrityViolationException
がスローされます。私はこの例外を捕まえて処理することができますが、それは私がやりたいことではありません。まず、root.get("orderCount")
の値がnullでないかどうか確認したいと思います。そうでなければ、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));
}
}
誰でも手助けできますか?