从QueryDSL JPA(JPAQuery或JPQLQuery)获取本机SQL

时间:2016-11-30 11:45:17

标签: jpa jpql querydsl

我需要根据分页数来计算分组数。例如:

select count(*) from ( 
    select name, count(id) from customer
    group by name
);

然而,由于JPA的限制,无法通过QueryDSL实现 其中JPQL不允许从子查询中选择计数。

是否可以从QueryDSL JPAQuery或JPQLQuery获取本机SQL?我的计划是通过EntityManager构造和执行select count本机SQL语句。

String subQueryNativeSQL = "..."; // native SQL from QueryDSL
Query q = em.createNativeQuery("select count(*) from (" + subQueryNativeSQL + ")");
long count = (long) q.getSingleResult();

1 个答案:

答案 0 :(得分:1)

JPAQueryJPQLQuery都会实施Projectable接口并实施count()方法 - 您不需要子查询