QueryDSL-将子查询添加到FROM语句中(2021)



2013年,根据@Timo Westkämper的说法(请参阅QueryDSL-将子查询添加到FROM语句中(,可以在FROM子句中包含子查询。现在,由于JPQL规范不允许这样做,这似乎不再可能了:

(https://docs.oracle.com/cd/E12839_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_subqueries)在此版本中,子查询仅限于WHERE和HAVING子句。FROM子句中对子查询的支持将在规范的后续版本中考虑。

我不明白这怎么可能。您能确认在querydsl 4.4.x中的FROM子句中不可能使用子查询吗?

如果你仔细阅读链接的问题,蒂莫说的是"Querydsl SQL";。这是直接发出SQL的QueryDSL模块,完全绕过JPA。

也就是说,当使用纯SQL时,可以在from子句中使用子查询,但当使用JPQL时则不能。

这就是为什么方法com.querydsl.sql.SQLCommonQuery.from有一个采用SubQueryExpression的重载,而方法com.querydsl.jpa.JPQLQuery.from没有这样的重载。

最新更新