如何计算Criteria Api中的行数

时间:2013-11-14 15:48:13

标签: java hibernate java-ee criteria-api

我要做的是计算适合类型标准的行(我需要警告用户查找将花费一些时间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 个答案:

答案 0 :(得分:3)

使用Projections从条件

获取行数
  criteria.setProjection(Projections.rowCount());
  return Integer.parseInt(criteria.list().get(0).toString());

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用预测来获取行数

criteria.setProjection(Projections.rowCount());
int count = Integer.valueOf(criteria.uniqueResult());
相关问题