2016-11-30 1 views
1

У меня есть требование, чтобы подсчитать количество групп по записям для целей разбивки на страницы. Например:Получить собственный SQL из QueryDSL JPA (JPAQuery или JPQLQuery)

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

Однако это не может быть достигнуто с помощью QueryDSL из-за ограничения JPA , где JPQL не позволяет выбрать количество из суб запроса.

Возможно ли получить собственный SQL из QueryDSL JPAQuery или JPQLQuery? Мой план состоит в том, чтобы сконструировать и выполнить собственный SQL-запрос select count через EntityManager.

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

Конечно JPQL позволяет вам выбрать COUNT в подзапроса, согласно спецификации JPA. 'simple_select_expression :: = single_valued_path_expression | скалярное выражение | aggregate_expression | ident_variable' –

+0

Привет, Neil. Может быть, вы можете показать мне, как использовать JPQL для построения оператора SQL, который я разместил выше? – kenn3th

+0

Возможно, вы можете опубликовать свои ENTITIES и то, что вы пробовали с помощью JPQL. Поскольку JPQL явно зависит от классов/полей, и вы не публикуете ни одно из них –

ответ

1

JPAQuery Как и JPQLQuery реализовать Projectable интерфейс и осуществлять count() метод - и не нужно подзапросы

Смежные вопросы