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