使用现有的JPAQuery作为子查询

时间:2019-05-14 13:23:28

标签: java jpa jpql querydsl

我有一个JPAQuery<?>的实例,需要检索计数。但是,由于该表可能包含许多项目(百万),因此我想将计数限制为给定的最大值,例如50,000。

当前的QueryDSL代码可以有效地做到这一点:

query.fetchCount();

现在我想要的修改在原始sql中是微不足道的:

select count(*) from (<whatever query> limit 50000);

但是,我不知道如何在querydsl中表达这一点。以下代码不正确,因为.from()采用实体路径,但是query是查询:

JPAExpressions.select(Wildcard.all)
    .from(query.limit(50000))
    .fetchCount();

我正在使用querydsl 4。

1 个答案:

答案 0 :(得分:0)

JPAExpressions.select(Wildcard.all)返回SimplyQuery的子级,您可以对其调用limit。

JPAExpressions.select(Wildcard.all)
    .from(entity)
    .limit(50000)
    .fetchCount();