I am rather new to JPA 2 and it\'s CriteriaBuilder / CriteriaQuery API:
CriteriaQuery javadoc
CriteriaQuery in the Java EE 6 tutorial
I would like to
I've sorted this out using the cb.createQuery() (without the result type parameter):
public class Blah() {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery query = criteriaBuilder.createQuery();
Root root;
Predicate whereClause;
EntityManager entityManager;
Class domainClass;
... Methods to create where clause ...
public Blah(EntityManager entityManager, Class domainClass) {
this.entityManager = entityManager;
this.domainClass = domainClass;
criteriaBuilder = entityManager.getCriteriaBuilder();
query = criteriaBuilder.createQuery();
whereClause = criteriaBuilder.equal(criteriaBuilder.literal(1), 1);
root = query.from(domainClass);
}
public CriteriaQuery getQuery() {
query.select(root);
query.where(whereClause);
return query;
}
public CriteriaQuery getQueryForCount() {
query.select(criteriaBuilder.count(root));
query.where(whereClause);
return query;
}
public List list() {
TypedQuery q = this.entityManager.createQuery(this.getQuery());
return q.getResultList();
}
public Long count() {
TypedQuery q = this.entityManager.createQuery(this.getQueryForCount());
return q.getSingleResult();
}
}
Hope it helps :)