2012-10-08 8 views
10

मैं अपने डेटा को पेजिंग करने के लिए पेजिंग एंड सोर्सिंग रिपोजिटरी का उपयोग करता हूं और सभी (पेजेबल पेजेबल) विधि ढूंढता हूं। मुझे लगता है कि कोई शर्त प्रदान करने का कोई तरीका नहीं है। उदाहरण के लिए कभी-कभी मैं चुनिंदा और पेजिंग पते चाहता हूं जहां शहर = एनवाई। क्या स्थिति और पेजिंग एक साथ प्रदान करने का कोई तरीका है?स्प्रिंग डेटा जेपीए में मानदंड क्वेरी के साथ पेजिनेशन को कैसे जोड़ें?

उत्तर

10

PagingAndSortingRepository सिर्फ बहुत ही बुनियादी CRUD तरीकों कहते हैं अंकन मोड में। reference documentation वर्णन करता है, आप इस क्वेरी के पेजिनेशन को प्राप्त करने के लिए परिभाषित किसी भी क्वेरी विधि में बस Pageable पैरामीटर जोड़ सकते हैं।

interface CustomerRepository implements Repository<Customer, Long> { 

    Page<Customer> findByLastname(String lastname, Pageable pageable); 

    List<Customer> findByFirstname(String firstname, Pageable pageable); 
} 

पहली विधि एक Page लौट कुल उपलब्ध आदि इस डेटा यह क्वेरी व्युत्पन्न के लिए एक अतिरिक्त गिनती क्वेरी को गति प्रदान करेगा गणना करने के लिए तत्वों की तरह पेज मेटाडाटा युक्त होगा। दूसरी क्वेरी विधि गिनती क्वेरी निष्पादित किए बिना सादे कटा हुआ परिणाम सेट लौटाती है।

+0

पेजगल के साथ हैलो @ ओलिवियर मुझे नहीं लगता कि 'ऑफसेट' कहां निर्दिष्ट करना है, 'पेजरक्वेट' केवल 'पृष्ठ' और' आकार 'स्वीकार करता है। मैं वास्तव में नहीं देखता कि मुझे अपना 'ऑफसेट' प्राप्त करने के लिए 'पेज * आकार' क्यों करना है। 'पृष्ठ' के विपरीत 'ऑफसेट' का उपयोग करने का कोई तरीका है? –

+1

'पेजरक्वेट' का कारण 'पृष्ठ' और 'आकार' का खुलासा केवल 'ऑफसेट' के रूप में पर्याप्त नहीं है क्योंकि आपको अभी भी 'आकार' की आवश्यकता है। पृष्ठांकन की अवधारणा आमतौर पर डेटा पर एक पृष्ठ केंद्रित दृश्य का तात्पर्य है, जिसे हम यहां व्यक्त करते हैं। लेकिन कुछ भी आपको 'पेजेबल' के अपने कार्यान्वयन के साथ आने से रोकता है जो ऑफ़सेट और आकार के साथ काम करता है। –

+0

हम प्रश्न API के साथ पागिवेशन का उपयोग कैसे कर सकते हैं? –

2

पृष्ठांकन के लिए आप 2 तरीकों getCount (पृष्ठांकन योग्य पृष्ठांकन योग्य) और findAll (पृष्ठांकन योग्य पृष्ठांकन योग्य)

हाइबरनेट में इस कार्यक्षमता का उपयोग की तरह की जरूरत है, हालांकि, तुच्छ है। इसी तरह

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

, यदि आप एक मानदंड प्रश्न हैं, यह प्रभावी रूप से एक ही बात है:: आप किसी भी HQL क्वेरी है, तो आप बस यह कर सकते हैं

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 ; 
} 
+0

सहायता के लिए धन्यवाद। मैंने जेपीए समाधान की तलाश की लेकिन डेटा न्यूक्लियस ने जेपीए को प्रश्न के टैग से हटा दिया। मैंने हाइबरनेट टैग को व्यक्त करने के लिए प्रयोग किया कि हाइबरनेट मेरा दृढ़ प्रदाता है। – Mariusz

संबंधित मुद्दे