2016-11-30 71 views
1

我有一個要求,以記錄分組數來計算分頁目的。例如:從QueryDSL獲取原生SQL JPA(JPAQuery或JPQLQuery)

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

但是它無法通過QueryDSL實現由於JPA 的限制,其中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(); 
+0

中JPQL允許您在一個子查詢SELECT COUNT,按照JPA規範。 'simple_select_expression :: = single_valued_pa​​th_expression |標量表達式|聚合表達式| identify_variable' –

+0

嗨Neil,可能你可以告訴我如何使用JPQL來構建我上面發佈的SQL語句? – kenn3th

+0

也許你可以發佈你的ENTITIES以及你已經用JPQL嘗試過的東西。因爲JPQL顯然依賴於類/字段而你沒有發佈它們 –

回答

1

兩個JPAQueryJPQLQuery實現Projectable接口和實現count()方法 - 你是不是需要子查詢當然