【发布时间】:2017-04-14 17:29:39
【问题描述】:
出于分页目的,我需要按记录计算分组数。例如:
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();
【问题讨论】:
-
当然,JPQL 允许您根据 JPA 规范在子查询中选择 COUNT。
simple_select_expression::= single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable -
嗨 Neil,你能告诉我如何使用 JPQL 来构造我上面发布的 SQL 语句吗?
-
也许您可以先发布您的实体以及您使用 JPQL 尝试过的内容。因为 JPQL 显然依赖于类/字段,而你没有发布它们
-
标题(我正在寻找的)与实际问题无关。请更新。