Querydsl,SELECT中的子查询

San*_*ndy 5 querydsl

我将以下SQL作为本机查询运行,但我想知道是否有一种方法可以在JPAQuery中运行以使用元组或类实例化。

SELECT a.*, 
      (SELECT exists (SELECT 1 FROM Table b WHERE b.a_code = a.code AND b.other =  ?)) AS bloquant 
FROM Table a
Run Code Online (Sandbox Code Playgroud)

为了精确起见,我使用的不是QTypes别名。

小智 -1

如果您的正确查询是:

SELECT *
FROM tablea
WHERE EXISTS(SELECT 1 FROM tableb WHERE tableb.a_code=tablea.code and tableb=$PARAM_VALUE);
Run Code Online (Sandbox Code Playgroud)

然后你可以得到正确的 SQL 表达式:

QTableA qTableA = new QTableA("tablea");
QTableB qTableB = new QTableB("tableb");

// Subquery creation
SQLQuery subquery = SQLExpressions.selectOne()
    .from(qTableB)
    .where(qTableB.a_code.eq(qTableA.code).and(qTableB.other.eq(PARAM_VALUE)));
return subquery.exists();

SQLQuery query = new SQLQuery();
query.setUseLiterals(true);
query
    .select(SQLExpressions.countAll)
    .from(qTableA)
    .where(subquery.exists());
return query.getSQL().getSQL();
Run Code Online (Sandbox Code Playgroud)