jpa条件生成器结合分页和计数结果

时间:2015-12-06 09:11:46

标签: jpa count pagination eclipselink criteria

实施分页,您可以使用条件构建器从结果集中返回页面。但是,如果您需要获取完整数量的结果(页面),则必须使用相同的计数条件运行单独的查询。

有没有办法将两者结合成单个数据库调用并节省性能而无需返回完整集并自己实现页面?

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<EntityJpa> cq = cb.createQuery(EntityJpa.class);
    Root<EntityJpa> root = cq.from(EntityJpa.class);
    Predicate p = cb.conjunction();
    cq.where(p);
    TypedQuery<EntityJpa> tq = em.createQuery(cq);
    return tq.getResultList();

和计数

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Long> cq = cb.createQuery(Long.class);
    Root<EntityJpa> r = cq.from(EntityJpa.class);
    Predicate p = cb.conjunction();
    cq.where(p);
    cq.select(cb.count(r));
    TypedQuery<Long> tq = em.createQuery(cq);
    return tq.getSingleResult().intValue();

1 个答案:

答案 0 :(得分:0)

CriteriaQuery<Long> cq = cb.createQuery(Long.class);
cq.select(cb.count(root)).where(pred).distinct(true);
Long maxPages = em.createQuery(cq).getSingleResult();    

我们利用这样的东西。我正在研究一种缓存结果的方法,这样就不必在每次分页时都进行计数,但是现在这对我们有用。