QueryDSL 4 select + 其中 + 存在

QueryDSL 4 select + where + exists

刚开始在我的工作中使用 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)
     )

我的所有问题 class 都准备好了。 到目前为止,这就是我所拥有的(伪代码):

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

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

谢谢!

只是想说我使用布尔表达式 class 解决了我的问题。

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

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

你可以这样做

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()));