2017-03-17 6 views
0

私はここで質問するので、それを理解しようとしました。私の目標は、CriteriaBuilderによるデータベースクエリの一部のデータをフィルタリングすることです。各Clientには、howMuchOrdersorderTotalValueのようなフィールドがあります。ここでPersistanceのCriteriaBuilder - 0より大きいかどうかを確認する

私は私のatLeastAverageValue与えられたが、(howMuchOrdersorderTotalValueを除して算出)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)); 

    } 
} 

誰でも手助けできますか?

答えて

0

解決策を見つけました!私はifステートメントのように値が0より大きいかどうかを調べることができませんでしたが、SQLクエリがどのように見えるか想像しました。私はちょうどorderCount > 0orderValue/order場合は論理ANDにチェックするために必要な:)次のようになります。

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

私はいくつかの時間を必要と:)

関連する問題