QueryDSL 4 选择 + 其中 + 存在

Fab*_*o K 5 exists querydsl

我刚开始在工作中使用 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)
     )
Run Code Online (Sandbox Code Playgroud)

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

JPAQuery query = new JPAQuery(em);
query.from(xDocument).where(xDocument.status.eq(0))
Run Code Online (Sandbox Code Playgroud)

我阅读了文档,但没有“ .exists()”方法。我也尝试过使用该类JDOExpressions,但我无法想出解决方案。

有人能指出我正确的方向吗?

Mar*_*tin 5

你可以做类似的事情

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()));
Run Code Online (Sandbox Code Playgroud)