【问题标题】:Get native SQL from QueryDSL JPA (JPAQuery or JPQLQuery)从 QueryDSL JPA(JPAQuery 或 JPQLQuery)获取本机 SQL
【发布时间】: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 显然依赖于类/字段,而你没有发布它们
  • 标题(我正在寻找的)与实际问题无关。请更新。

标签: jpa jpql querydsl


【解决方案1】:

JPAQueryJPQLQuery 都实现了 Projectable 接口并实现了 count() 方法 - 而且您不需要子查询

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2016-03-28
    • 2016-01-11
    • 2019-06-02
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多