QueryDSL 4选择+ where +存在

时间:2017-06-21 23:44:03

标签: 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)
     )

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您可以做类似的事情

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