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

0

ほとんどのデータベースは、WHERE 句によっては、要求する前に何を要求するかを知りません。したがって、これを行う最も一般的な方法は、テーブルと where 句を受け取り、それに対して count(*) を実行して、クエリに一致する行数を通知するメソッドを作成することです。

于 2013-11-14T16:01:40.253 に答える
0

プロジェクションを使用して行数を取得できます

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