3
让我直截了当。 我在一个项目中使用Spring Data JPA和QueryDSL,我无法自己弄清楚这一点。Spring Data + 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 oprators:
someRepository.findAll(byWhateverId(someParam).and(bySomethingElseId(1));
这里的问题是,在这一点上我不知道“someParam”是否为空或不是(当然,我可以检查,但是这是一个很大的IF)。 我也知道我可以使用BooleanBuilder类,但看起来也像很多不应该需要的代码。
有谁知道可以插入什么而不是“[在此插入魔术]”? 或者我错过了某个地方的东西...
谢谢!
感谢您的答复。 这看起来相当不错,但我仍然想要链接,没有任何额外的成本(如使用ExpressionUtils)。此解决方案基本上与BooleanBuilder相同。我真的很喜欢WhateverId(1).and(bySomethingElseId(1))的方式。 但也许我在这件事上太严格了,我应该接受这个:) – user1622058 2014-11-24 10:00:49