PagingAndSortingRepository と findAll(Pageable pageable) メソッドを使用して、データをページングします。条件を提供する方法はないと思います。たとえば、city=NY のアドレスを選択してページングしたい場合があります。条件とページングを同時に提供する方法はありますか?
23482 次
2 に答える
14
PagingAndSortingRepository
ページネーション モードで非常に基本的な CRUD メソッドを追加するだけです。リファレンス ドキュメントに記載されているように、Pageable
定義した任意のクエリ メソッドにパラメーターを追加するだけで、このクエリのページネーションを実現できます。
interface CustomerRepository implements Repository<Customer, Long> {
Page<Customer> findByLastname(String lastname, Pageable pageable);
List<Customer> findByFirstname(String firstname, Pageable pageable);
}
最初のメソッドは、使用可能な要素の総数などのページ メタデータを含む を返しPage
ます。このデータを計算するために、派生したクエリに対して追加のカウント クエリがトリガーされます。2 番目のクエリ メソッドは、count クエリを実行せずに、スライスされたプレーンな結果セットを返します。
于 2012-10-09T06:07:48.507 に答える
4
ページネーションには、getCount(Pageable pageable) と findAll(Pageable pageable) のような 2 つのメソッドが必要です。
ただし、Hibernate でこの機能を利用するのは簡単です。HQL クエリがある場合は、次のように簡単に実行できます。
public Long getCount(Pageable pageable) {
Query q = session.createQuery("Select count(t) From TableClass t where t.city = 'NY'");
Long cnt = (Long) q.uniqueResult();
return cnt;
}
public List<TableClass> findAll(Pageable pageable) {
Query q = session.createQuery("From TableClass t where t.city = 'NY'");
q.setFirstResult(start);
q.setMaxResults(length);
List<TableClass> tableClasslist = q.list();
return tableClasslist;
}
同様に、Criteria クエリがある場合は、事実上同じです。
public Long getCount(Pageable pageable) {
Criteria c = session.createCriteria(TableClass.class);
c.setProjection(Projections.rowCount());
Long cnt = (Long) c.uniqueResult();
return cnt;
}
public List<TableClass> findAll(Pageable pageable) {
Criteria c = session.createCriteria(TableClass.class);
c.setParameter("city","NY");
c.setFirstResult(start);
c.setMaxResults(length);
List<TableClass> tableClasslist = c.list();
return tableClasslist ;
}
于 2012-10-08T14:08:53.323 に答える