2016-08-06 11 views
5

すべてのCRUD操作にJPARespositoryを使用しています。 最近並べ替えを実装したかったので、Pagableを先に進めました。春のデータでリストを取得する方法REST

問題は、私はリポジトリメソッドがListオブジェクトを返すようにしたい、私はそれらを私のサービス層で使う。

どうすればいいですか?PageオブジェクトをListに変換する方法はありますか?

答えて

8

jpaリポジトリメソッドでpageableを使用すると、springは常にListではなくPageを返します。リポジトリメソッドを呼び出し、ページ結果の内容をリストに抽出するサービスメソッドがあることをお勧めします。

リポジトリの方法は、このようにあるのであれば:

import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable; 
import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.stereotype.Repository; 

@Repository 
public interface RecordRepository extends JpaRepository<Record, Integer>{      
    Page<Record> findAll(Pageable pageable); 
} 

あなたはあなたの呼び出し元のクラスではなく、呼び出しので、リポジトリ方式

@Service 
public class RecordService{ 

    @Autowired 
    RecordRepository recordRepository; 

    public List<Record> findAll(PageRequest pageRequest){ 
    Page<Record> recordsPage = recordRepository.findAll(pageRequest); 
    return recordsPage.getContent(); 
    } 
} 

を呼び出すメソッドを持っているサービスクラスを持つことができますリポジトリは直接サービスを使用することができます。したがって:

public class MyRecordImpl{ 
    @Autowired 
    RecordService recordService; 

    public void doSomething(){ 
     int page = 0; int pageSize = 5; 
     List<Record> recordList = recordService.findAll(new PageRequest(page, pageSize, new Sort(Sort.Direction.DESC, "recordId"))); 
    //do other implementations here 
    } 
} 
+0

しかし '.getContent()'すべてからすべてを返しませんページ、またはその単一のページのデータだけ? – mmcrae

+1

@mmcrae .getContent()は単一のページのデータを返します – Sohlowmawn

+0

すべてのページからすべてを取得してリストに変換する方法は? – gavinSong

1

私は、これはそれがグーグルにポップして、すべてのページのすべての情報がリストに変換する必要があるときに、人々がより多くの回答が必要な場合があります最初のオプションである、私は遅れていますが、知っている...

一つaproximationができ:

xRepository.findAll(new PageRequest(0, Integer.MAX_VALUE)).getContent(); 

ここでの問題は、春は1000年に最大サイズを設定しますので、あなたは、最大1000個の要素のリストを取得しようとしているということです。

diferentページインデックスを見つける複数のことができやって、その後のgetContent()でリストに結果を追加する他の方法:

Page<T> pageData = xRepository.findAll(new PageRequest(0, 20)); 
List<T> finalList = pageData.getContent(); 
while(!pageData.isLast()){ 
    pageData = xRepository.findAll(pageData.nextPageable()); 
    List<T> listData = pageData.getContent(); 
    //append listData into finalList 
} 
関連する問題