1

我要做的是计算符合键入条件的行(我需要警告用户查找将花费一些时间 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”数据库并在我获取这些行之前询问它将为我提供多少行?

4

4 回答 4

3

用于Projections从条件中获取行数

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

或者

criteria.select(qb.count(p.get(TrackingDAO_.id)));
于 2013-11-14T15:59:50.083 回答
1

在我的情况下,所有看起来都像 count 方法在执行我的代码期间返回每一个操作,我假设如下数字:当查询返回 430 个结果时为 6949360,当我有 1 个结果时为“仅”1131

于 2013-11-14T16:31:29.310 回答
0

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

于 2013-11-14T16:01:40.253 回答
0

您可以使用 Projections 来获取行数

criteria.setProjection(Projections.rowCount());
int count = Integer.valueOf(criteria.uniqueResult());
于 2013-11-14T16:04:52.003 回答