2016-11-30 3 views
1

페이지 매김을 위해 레코드별로 그룹 수를 세는 요구 사항이 있습니다. 예를 들어QueryDSL JPA (JPAQuery 또는 JPQLQuery)에서 원시 SQL 가져 오기

이 때문에 JPQL 서브 쿼리 카운트를 선택할 수없는 JPA 의 한계에 QueryDSL 통해 달성 될 수없는 그러나
select count(*) from ( 
    select name, count(id) from customer 
    group by name 
); 

.

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(); 
+0

물론 하위 쿼리를 필요로하지 않습니다. 'simple_select_expression :: = single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable' –

+0

Neil, 안녕하세요. 제가 위에 게시 한 SQL 문을 구성하는 데 JPQL을 사용하는 방법을 보여 주시겠습니까? – kenn3th

+0

아마도 ENTITIES와 JPQL로 시도한 것을 게시 할 수 있습니다. JPQL은 클래스/필드에 분명히 의존하므로 아무 것도 게시하지 않습니다. –

답변

1
모두 JPAQuery

JPQLQueryProjectable 인터페이스를 구현하고 count() 방법을 구현 - 당신은 JPQL은 JPA 사양에 따라, 하위 쿼리에서 COUNT를 선택할 수 있습니다