JPA 2.0: count beliebigen CriteriaQuery?

Ich versuche zu implementieren ist die folgende convenience-Methode:

/**
 * 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);

Im Ruhezustand, diese erfolgt durch

criteria.setProjection(Projections.rowCount());

Was ist das äquivalent zu der oben in JPA? Ich fand zahlreiche einfache Zählung Beispiele, aber keiner von Ihnen machte den Einsatz einer CriteriaQuery, dessen Zeilenanzahl ermittelt werden soll.

EDIT:

Ich leider herausgefunden, dass @Pascal s Antwort ist nicht die richtige. Das problem ist sehr subtil und nur zeigt, wenn Sie joins verwenden:

//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);

Beim Aufruf findCountByCriteria(query), es stirbt mit der folgenden Ausnahme:

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

Gibt es eine andere Möglichkeit, einen solchen CountByCriteria Methode?

  • Wo Sie in der Lage, eine Lösung zu finden? Ich bin an der gleichen Kreuzung, und nicht wissen, wie Sie Vorgehen. Danke.
  • Ich bin ziemlich sicher, es ist nicht möglich, nachdem alle.
  • Offenbar ist es möglich, nachdem alle. Finden Sie Jose Luis Martin ' s Antwort. Ich habe nicht versucht es, aber es sieht aus wie die wahre Lösung für mich.
  • Vielen Dank für das heads-up, einen Blick auf Sie, wenn ich kommen Sie zurück, um es.
InformationsquelleAutor blubb | 2010-10-22
Schreibe einen Kommentar