2016-08-06 13 views
5

में पृष्ठ से सूची कैसे प्राप्त करें मैं अपने सभी सीआरयूडी ऑपरेशन के लिए JPARespository का उपयोग कर रहा हूं। हाल ही में मैं सॉर्टिंग को कार्यान्वित करना चाहता था, इसलिए मैं Pagable के साथ आगे बढ़ गया।स्प्रिंग डेटा रीस्ट

समस्या यह है कि, मैं रिपोजिटरी विधियों को List ऑब्जेक्ट्स लौटने के लिए चाहता हूं, मैं उन्हें अपनी सेवा परत में उपयोग करता हूं।

मैं इसे कैसे प्राप्त कर सकता हूं, क्या इन Page ऑब्जेक्ट्स को List में परिवर्तित करने का कोई तरीका है?

उत्तर

8

यदि आप एक जेपीए रिपोजिटरी विधि में पेजेबल का उपयोग करते हैं, तो वसंत हमेशा एक पृष्ठ को सूची में वापस नहीं करेगा। मेरा सुझाव है कि आपके पास एक सेवा विधि है जो रिपोजिटरी विधि को कॉल करती है और पेज परिणाम की सामग्री को सूची में निकाल देती है।

इसलिए यदि आपके भंडार विधि इस प्रकार है:

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 तत्वों की सूची प्राप्त करने के लिए जा रहे हैं।

कर यह कई विभिन्न पेज अनुक्रमित के साथ लगता है हो सकता है और उसके बाद 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 
} 
संबंधित मुद्दे