gpt4 book ai didi

Java JPA : conditional predicates, 如何根据 boolean 值省略一个

转载 作者:行者123 更新时间:2023-11-29 03:37:40 29 4
gpt4 key购买 nike

我有一些 boolean 值,基于这些 boolean 值,我需要在 CriteriaQuery 中包含一个 Predicate。但是,给定示例 1 中的方法不起作用,因为对函数 where() 的第二次调用将覆盖任何先前的属性。这意味着只有最后一个 Predicate 会被执行。

通常您会像示例 2 中那样堆叠 Predicates

但是,由于 boolean 值给出的条件,这是不可能的。我正在尝试防止示例 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(...)); }
(...)

最佳答案

您可以将它们收集在一个列表中,然后在末尾设置 where 子句,例如:

private final List<Predicate> predicates = new ArrayList<Predicate>(3);
...
if(a) {
predicates.add(cb.equal(...));
}
if(b) {
predicates.add(cb.equal(...));
}
if(c) {
predicates.add(cb.equal(...));
}
...
query.where(predicates.toArray(new Predicate[predicates.size()]));
...

关于Java JPA : conditional predicates, 如何根据 boolean 值省略一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649636/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com