PagingAndSortingRepositoryとfindAll(Pageable pageable)メソッドを使用してデータをページングします。条件をつける方法はないと思います。たとえば、city = NYのアドレスを選択してページングしたい場合があります。状態とページングを同時に提供する方法はありますか?
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番目のクエリメソッドは、カウントクエリを実行せずにプレーンスライスされた結果セットを返します。
ページネーションには、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 ;
}