让我开门见山。
我在项目中使用 Spring Data JPA 和 QueryDSL,但我自己无法弄清楚这一点。
我在静态方法中有 QueryDSL 谓词,可以接受参数,如果参数不正确,它应该返回“空谓词”:
public static BooleanExpression byWhateverId(Long whateverId) {
if(whateverId == null) return [insert magic here];
// if parameter is OK return usual predicate
return QClass.property.whateverId.eq(whateverId);
}
现在我希望能够使用 AND/OR 运算符链接这些谓词:
someRepository.findAll(byWhateverId(someParam).and(bySomethingElseId(1));
这里的问题是,此时我不知道 'someParam' 是否为空(当然我可以检查,但有很多 IF)。
我也知道我可以使用 BooleanBuilder 类,但这似乎也不需要很多代码。
有谁知道可以插入什么来代替“[在此插入魔法]”???
或者也许我在某个地方遗漏了一些东西......
Thanks!
对于不匹配的谓词,您可以返回 nullbyWhateverId
and bySomethingElseId
并通过组合谓词ExpressionUtils.allOf()
在你的情况下
Predicate where = ExpressionUtils.allOf(byWhateverId(someParam), bySomethingElseId(1));
someRepository.findAll(where);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)