JPA 2.0: подсчет произвольных запросов CriteriaQuery?

Я пытаюсь реализовать следующий удобный метод:

/**
 * Counts the number of results of a search.
 * @param criteria The criteria for the query.
 * @return The number of results of the query.
 */
public int findCountByCriteria(CriteriaQuery<?> criteria);

В Hibernate это выполняется с помощью

criteria.setProjection(Projections.rowCount());

Что эквивалентно приведенному выше в JPA? Я нашел множество простых примеров подсчета, но ни один из них не использовал CriteriaQuery, количество строк которого должно быть определено.

EDIT:

К сожалению, я обнаружил, что ответ @Pascal неправильный. Проблема очень тонкая и проявляется только при использовании объединений:

// Same query, but readable:
// SELECT *
// FROM Brain b
// WHERE b.iq = 170

CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
Join<Object, Object> brainJoin = root.join("brain");
Predicate iqPredicate = cb.equal(brainJoin.<Integer>get("iq"), 170);
query.select(root).where(iqPredicate);

При вызове findCountByCriteria (query) он умирает со следующим исключением:

org.hibernate.hql.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.iq' [select count(generatedAlias0) from xxx.tests.person.dom.Person as generatedAlias0 where generatedAlias1.iq=170]

Есть ли другой способ предоставить такой Метод CountByCriteria ?

11
задан blubb 7 September 2011 в 14:01
поделиться