に a を含める必要があるこれらのブール値に基づいて、いくつかのブール値がありPredicate
ますCriteriaQuery
。ただし、指定された例 1 のアプローチは機能しません。関数の 2 回目の呼び出しがwhere()
以前の属性をオーバーライドするためです。これは、最後だけPredicate
が実行されることを意味します。
通常はPredicates
、例 2 のようにスタックします。
ただし、ブール値によって指定された条件により、これは不可能です。例 3 に見られるような状況を防止しようとしています。何か提案はありますか?
例 1
function(boolean a, boolean b, boolean c) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Product> query = cb.createQuery(Product.class);
Root product = query.from(Product.class);
query.select(product);
if(a) {
query.where(cb.equal(...));
}
if(b) {
query.where(cb.equal(...));
}
if(c) {
query.where(cb.equal(...));
}
return em.createQuery(query).getResultList();
}
例 2
query.where(cb.equal(...), cb.equal(...), cb.equal(...));
例 3
if(a && b && c) { query.where(cb.equal(...), cb.equal(...), cb.equal(...)); }
if(a && b && !c) { query.where(cb.equal(...), cb.equal(...)); }
if(a && !b && c) { query.where(cb.equal(...), cb.equal(...)); }
if(a && !b && !c) { query.where(cb.equal(...)); }
(...)