Spring Data + QueryDSL 空谓词 + 谓词链

2024-05-27

让我开门见山。 我在项目中使用 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(使用前将#替换为@)

Spring Data + QueryDSL 空谓词 + 谓词链 的相关文章

随机推荐