加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Spring Data QueryDSL空谓词谓词链接

发布时间:2020-12-15 01:39:36 所属栏目:大数据 来源:网络整理
导读:让我直截了当. 我在一个项目中使用Spring Data JPA和QueryDSL,我自己也无法弄清楚这一点. 我在静态方法中有QueryDSL谓词可以接受参数,如果参数不正确,它应该返回“空谓词”: public static BooleanExpression byWhateverId(Long whateverId) { if(whateverI

让我直截了当.
我在一个项目中使用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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读