【问题标题】:QueryDSL 4 select + where + existsQueryDSL 4 select + where + exists
【发布时间】:2017-11-25 01:16:21
【问题描述】:

刚开始在我的工作中使用 queryDSL。到目前为止,我认为语法非常直观。

我需要将一个非常简单的 SQL 查询转换为 queryDSL,但我不知道如何处理 EXISTS 子句。

SELECT * FROM XRDocument document
 WHERE status = 0
   AND EXISTS
     (
       select * FROM XEntity X WHERE X.pid in (11,22,33)
     )
  AND NOT EXISTS
     (
      select * FROM XEntity X WHERE X.pid in (44,55,66)
     )

我已经准备好了所有的 Q 课程。 到目前为止,这就是我所拥有的(伪代码):

JPAQuery query = new JPAQuery(em);
query.from(xDocument).where(xDocument.status.eq(0))

我阅读了文档,但没有“.exists()”方法。我也尝试过使用 JDOExpressions 类,但我想不出一个解决方案。 谁能指出我正确的方向?

谢谢!

【问题讨论】:

    标签: exists querydsl


    【解决方案1】:

    只是想说我使用 BooleanExpression 类解决了我的问题。

    BooleanExpression exists = JDOExpressions.selectFrom(xEntity).where(xEntity.pid.in(11,22,33)).exists();
    

    之后,您可以在 BooleanBuilder 中使用表达式。

    【讨论】:

      【解决方案2】:

      你可以做类似的事情

      JPAQuery query = new JPAQuery(em)
          .select(xDocument)
          .from(xDocument)
          .where(xDocument.status.eq(0)
              .and(JPAExpressions.selectOne()
                  .from(xEntity)
                  .where(xEntity.pid.in(11,22,33)
                  .exists())
              .and(JPAExpressions.selectOne()
                  .from(xEntity)
                  .where(xEntity.pid.in(44,55,66)
                  .notExists()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多