【问题标题】:QueryDSL Collection queryQueryDSL 集合查询
【发布时间】:2016-08-07 08:48:11
【问题描述】:

我想创建一个 QueryDSL 查询来检查对象 A 的列表(listA,包含 B 的多个对象)是否包含由不同列表(providedList)提供的任何对象 B。如果提供的列表中的 ANY 对象 B 也出现在 listA 中,我不想返回对象 A。

到目前为止我所拥有的:

return query.from(objA).where(objA.listA.any().notIn(providedList)).list(objA);

但是,目前providedList 中的所有项目都必须不在listA 中才能正常工作。有什么办法可以做到吗?

感谢您的帮助!

【问题讨论】:

    标签: querydsl


    【解决方案1】:

    您正在执行的查询将过滤 objA 表中的所有行。当您应用过滤器时,您只会显示与该列表中提供的任何项目不匹配的所有行。

    要在匹配时不返回任何内容,您应该首先检查是否有任何行与提供的列表匹配,例如计数。

    return query.from(objA).where(objA.listA.in(providedList)).list(objA.count());
    

    如果 objA.count() 大于 0,则该方法不应返回任何内容,如果为 0,则无需任何过滤器即可正常运行查询。

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2017-04-06
      • 2013-05-26
      • 2013-05-03
      相关资源
      最近更新 更多