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