Sto cercando di implementare il seguente metodo comodo:JPA 2.0: conta per CriteriaQuery arbitraria?
/**
* 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);
In Hibernate, questo è fatto da
criteria.setProjection(Projections.rowCount());
Qual è l'equivalente a quanto sopra in JPA? Ho trovato numerosi esempi di conteggi semplici, ma nessuno di loro ha fatto uso di una CriteriaQuery il cui conteggio delle righe deve essere determinato.
EDIT:
ho purtroppo scoperto che @ risposta di Pascal non è quella corretta. Il problema è molto sottile e mostra solo quando si utilizza unisce:
// 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);
Quando si chiama findCountByCriteria(query)
, muore con la seguente eccezione:
org.hibernate.hql.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.iq' [select count(generatedAlias0) from xxx.tests.person.dom.Person as generatedAlias0 where generatedAlias1.iq=170]
C'è un altro modo per fornire un tale metodo CountByCriteria
?
Dove è possibile trovare una soluzione? Sono allo stesso incrocio e non sono sicuro di come procedere. Grazie. – Ittai
@Ittai: Sono abbastanza sicuro che non sia possibile dopo tutto. – blubb
@Ittai: Apparentemente, è possibile dopotutto. Per favore, vedi la risposta di Jose Luis Martin. Non l'ho provato, ma mi sembra la vera soluzione. – blubb