Criteria API 如何统计行数?

问题描述 投票:0回答:4

我想做的是,计算符合键入条件的行数(我需要警告用户查找将花费一些时间

x rows * (estimated time for one row)
,我的代码如下所示:

CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Long> criteria = qb.createQuery(Long.class);
Root<TrackingDAO> p = criteria.from(TrackingDAO.class);
criteria.select(qb.count(criteria
            .from(TrackingDAO.class)));
/* my stuff with criteria */ 
TypedQuery<Long> q = em.createQuery(criteria);
setCounterOfLookUpResults(q.getSingleResult());

课程运行良好,在我得到结果之前,它们完全很奇怪,例如

56432
,我期待例如
430

有人可以告诉我,如何 ping 数据库并询问,在我获取这些行之前它将为我提供多少行?

java hibernate count criteria-api
4个回答
3
投票

使用

Projections
根据条件获取行数

  criteria.setProjection(Projections.rowCount());
  return Integer.parseInt(criteria.list().get(0).toString());

criteria.select(qb.count(p.get(TrackingDAO_.id)));

1
投票

在我的例子中,All 看起来像 count 方法返回执行代码期间的每一个操作,我假设这样的数字:当查询返回 430 个结果时为 6949360,当我有 1 个结果时“仅”1131


0
投票

大多数数据库在您根据 WHERE 子句请求之前并不知道您要请求什么。 因此,最通用的方法是编写一个方法,该方法接受您的表和 where 子句,并对它执行 count(*) 并告诉您有多少行与您的查询匹配。


0
投票

您可以使用投影来获取行数

criteria.setProjection(Projections.rowCount());
int count = Integer.valueOf(criteria.uniqueResult());
© www.soinside.com 2019 - 2024. All rights reserved.