我要做的是计算适合类型标准的行(我需要警告用户查找将花费一些时间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”数据库并询问在我获取这些行之前它会提供多少行?
答案 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());