刚开始在我的工作中使用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类,但我无法提出解决方案。 有人能指出我正确的方向吗?
谢谢!
答案 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()));