让我直截了当.
我在一个项目中使用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类,但这看起来也像很多不需要的代码.
有谁知道可以插入什么而不是“[在这里插入魔法]”???
或者也许我在某处丢失某些东西……
谢谢!
最佳答案
您可以在byWhateverId和bySomethingElseId中为非匹配谓词返回null,并通过ExpressionUtils.allOf()组合谓词
在你的情况下
Predicate where = ExpressionUtils.allOf(byWhateverId(someParam),bySomethingElseId(1));
someRepository.findAll(where);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。