Я хочу получить количество результатов динамично сгенерированного запроса HQL, на самом деле не получая список результатов. Скажите, что запрос, который я имею, является чем-то как:
select Company company LEFT OUTER JOIN FETCH products product
Я читал в Быть в спящем режиме документации что:
Можно считать количество результатов запроса, не возвращая их:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
Я подозревал, что должен заменять.... своим запросом, но это не работает, поскольку HQL не поддерживает, подвыбирает в ИЗ.
Так, как я должен считать результаты динамично сгенерированного запроса HQL? Я думаю, что путем выполнения его и получения .size () списка результатов может быть ненужный служебный.
За Ваше здоровье!
** ОБНОВЛЕНИЕ: **
Я использовал этот regex для преобразования моего запроса:
Number num = (Number) em.createQuery(dynamicQuery.replaceAll("select \\w+ from ", "select count(*) from ")).getSingleResult();
И я получаю это:
Блок цитирования
Исключение EJB:; вложенная исключительная ситуация: java.lang. IllegalArgumentException: org.hibernate. QueryException: запросите определенную выборку соединения, но владелец выбранной ассоциации не присутствовал в списке выборки [FromElement {явный, не, соединение набора, соединение выборки, выбирает неленивые свойства, classAlias=product, role=org.myCompany.applicant.entity. Applicant.products, tableName=PRS_DEV.PRODUCT, tableAlias=products1 _, origin=PRS_DEV.APPLICANT applicant0 _, colums = {applicant0_. APPLICANT_ID, className=org.myCompany.product.entity. Продукт }}] [выбирает количество () от org.myCompany.applicant.entity. Заявитель заявителя ОСТАВИЛ ВЫБОРКУ ВНЕШНЕГО ОБЪЕДИНЕНИЯ applicant.products продуктом]; вложенная исключительная ситуация: java.lang. IllegalArgumentException: org.hibernate. QueryException: запросите определенную выборку соединения, но владелец выбранной ассоциации не присутствовал в списке выборки [FromElement {явный, не, соединение набора, соединение выборки, выбирает неленивые свойства, classAlias=product, role=org.myCompany.applicant.entity. Applicant.products, tableName=PRS_DEV.PRODUCT, tableAlias=products1 _, origin=PRS_DEV.APPLICANT applicant0 _, colums = {applicant0_. APPLICANT_ID, className=org.myCompany.product.entity. Продукт }}] [выбирает количество () от org.myCompany.applicant.entity. Заявитель заявителя ОСТАВИЛ ВЫБОРКУ ВНЕШНЕГО ОБЪЕДИНЕНИЯ applicant.products продуктом]
Это должно помочь:
select count(*) FROM Company c JOIN ...
Подвыбор не задействован, просто вместо того, чтобы возвращать Company
, вы возвращаете считать.
Редактировать: FETCH
сейчас неуместен. Вы не возвращаете сущности из запроса, а только счетчик, таким образом, Hibernate жалуется. Удаление должно помочь:
select count(product) from org.myCompany.applicant.entity.Applicant applicant
LEFT OUTER JOIN applicant.products product