我正在为我的系统中的实体实现“高级搜索”类型的功能,以便用户可以在该实体的属性上使用多个条件(eq、ne、gt、lt 等)来搜索该实体。我正在使用 JPA 的 Criteria API 来动态生成 Criteria 查询,然后使用setFirstResult()
&setMaxResults()
来支持分页。到目前为止一切都很好,但现在我想在结果网格上显示结果总数,但我没有看到一种直接的方法来获取 Criteria 查询的总数。
这就是我的代码的样子:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Brand> cQuery = builder.createQuery(Brand.class);
Root<Brand> from = cQuery.from(Brand.class);
CriteriaQuery<Brand> select = cQuery.select(from);
.
.
//Created many predicates and added to **Predicate[] pArray**
.
.
select.where(pArray);
// Added orderBy clause
TypedQuery typedQuery = em.createQuery(select);
typedQuery.setFirstResult(startIndex);
typedQuery.setMaxResults(pageSize);
List resultList = typedQuery.getResultList();
我的结果集可能很大,所以我不想加载我的实体进行计数查询,所以请告诉我有效的方法来获取像rowCount()
Criteria 上的方法一样的总计数(我认为它在 Hibernate 的 Criteria 中)。