In JPA 2, using a CriteriaQuery, how to count results

前端 未结 7 1161
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-28 19:28

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

7条回答
  •  无人及你
    2020-11-28 20:01

    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 :)

提交回复
热议问题