2016-08-06 61 views
5

Ich benutze JPARespository für alle meine CRUD-Operation. Kürzlich wollte ich die Sortierung implementieren, also ging ich mit Pagable weiter.So erhalten Sie eine Liste von einer Seite in Spring Data REST

Das Problem ist, ich möchte die Repository-Methoden List Objekte zurückgeben, verwende ich sie in meiner Service-Schicht.

Wie kann ich dies erreichen, gibt es eine Möglichkeit, diese Page Objekte in List zu konvertieren?

Antwort

8

Wenn Sie in einer jpa-Repository-Methode auslagerbar sind, gibt spring immer eine Page, nicht eine Liste zurück. Ich schlage vor, Sie haben eine Service-Methode, die die Repository-Methode aufruft und den Inhalt des Page-Ergebnisses in eine Liste extrahiert.

Also, wenn Ihre Repository-Methode ist also:

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); 
} 

dann können Sie eine Serviceklasse haben, die eine Methode hat, die die Repository-Methode aufruft

@Service 
public class RecordService{ 

    @Autowired 
    RecordRepository recordRepository; 

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

so in Ihrer Berufung Klasse statt telefonieren das Repository direkt können Sie einfach den Service nutzen. also:

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

aber die '.getContent()' nicht alle alles Rückkehr aus die Seiten oder nur die Daten dieser einzelnen Seite? – mmcrae

+1

@mmcrae die .getContent() gibt nur die Daten dieser einzelnen Seite zurück – Sohlowmawn

+0

Wie man alles von allen Seiten erhält und sie in Liste umwandelt? – gavinSong

1

Ich weiß, ich bin spät, aber ist dies die erste Option, um es in Google erscheint und die Menschen können mehr Antworten benötigen, wenn alle Informationen von allen Seiten in eine Liste umgewandelt werden muss ...

One aproximation können sein:

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

Das Problem hierbei ist, dass der Frühling die maximale Größe auf 1000 setzt, so werden Sie eine Liste von maximal 1000 Elemente zu erhalten.

Eine andere Art und Weise, es zu tun mehrere finden mit diferent Seitenindizes sein können und das Hinzufügen dann die Ergebnisse in einer Liste mit 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 
}