Получение подсчета результатов из произвольного JPA CriteriaQuery

У меня проблема, когда код на слое, в котором я работаю, получает объект CriteriaQuery. У меня практически нет другой информации о запросе (хотя я могу сделать хорошее предположение о типе объекта или списка объектов, который он должен вернуть). Что мне нужно сделать, так это определить количество элементов, которые он вернет, не создавая все объекты .

Я хотел бы сделать что-то вроде SELECT count(*) from ([SQL-версия CriteraQuery])

Я попытался создать новый CriteriaQuery и использовать параметр CriteriaQuery в качестве подзапроса, но не смог найти способ сделать это.

Я попытался разобрать CriteriaQuery, чтобы создать правильный запрос count(), но мне не удалось определить различные части предложения where.

Я не смог найти способ получить инструкцию SQL из TypedQuery, сгенерированного из CriteriaQuery.

Итак, если не считать чего-то вроде следующего:

long getCount(CriteriaQuery<?> query)
{
   return entityManager.createQuery(query).getResultList().size();
}

можно ли в любом случае определить количество объектов/строк, которые будут возвращены CriteriaQuery?

Это отличается от в JPA 2, используя CriteriaQuery, как подсчитывать результаты в том, что этот вопрос касается случая, когда кто-то создает CriteriaQuery. В этом случае нам дается сконструированный CriteriaQuery (например, public int getCount(CriteriaQuery query))


person cWarren    schedule 15.08.2011    source источник
comment
видели это? stackoverflow.com/questions/2883887/   -  person bpgergo    schedule 16.08.2011
comment
@bpgergo Я этого не видел, но это не отвечает на мой вопрос. имеют только объект CriteriaQuery и не могут понять, как создать еще один объект, выполняющий count().   -  person cWarren    schedule 16.08.2011
comment
Вопрос, на который указал @bpgergo, имеет несколько ответов. Принятый ответ, однако, не тот, который вам нужен, однако Рейио опубликовал ответ, который может вам помочь. Почему ОП в указанном вопросе не принял этот ответ, мне не ясно.   -  person siebz0r    schedule 05.06.2012