Будьте в спящем режиме HQL: Получите количество результатов, на самом деле не возвращая их

Я хочу получить количество результатов динамично сгенерированного запроса 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 продуктом]

17
задан Markos Fragkakis 4 February 2010 в 09:51
поделиться

1 ответ

Это должно помочь:

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
13
ответ дан 30 November 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: