2012-02-24 9 views
11

मेरे पास कुछ सार तरीकों के साथ एक भंडार इंटरफ़ेस है जहां मैं @Query एनोटेशन का उपयोग करता हूं। अब मैं इस प्रश्नों के लिए सीमा जोड़ना और ऑफसेट समर्थन जोड़ना चाहता हूं।सीमा और ऑफसेट के साथ जेपीक्यूएल क्वेरी एनोटेशन

उदाहरण:

public interface ProductRepository 
    extends CrudRepository<Product, Long> { 

    @Query("from Product") 
    List<Product> findAllProducts(); 
} 

कुछ इस तरह अच्छा

public interface ProductRepository 
    extends CrudRepository<Product, Long> { 

    @Query("from Product limit :limit ") 
    List<Product> findAllProducts(@Param("limit") Integer limit); 
} 

होगा लेकिन यह काम नहीं करता। एक समाधान है कि मैं इंटरफ़ेस का कार्यान्वयन करता हूं (http://stackoverflow.com/questions/3479128/jpql-limit-number-of-results) लेकिन मुझे आश्चर्य है कि ऑफसेट और सीमा जोड़ने की संभावना नहीं है पूछताछ के लिए या इसके लिए एक टिप्पणी है।

+0

आप विधि को लागू क्यों नहीं करते हैं और जेपीए एपीआई का उपयोग क्यों नहीं करते? टिप्पणियां शांत हैं, लेकिन उन्हें आपके सभी जावा कोड को प्रतिस्थापित नहीं करना चाहिए। –

+1

यह वसंत के भंडार इंटरफेस का उपयोग और विस्तार करने का मानक तरीका है। –

+2

इसे लिखना ... मौलिक समस्या को हल करने का मानक तरीका 'PagingAndSortingRepository' का उपयोग करना है। –

उत्तर

5

limit जेपीक्यूएल द्वारा समर्थित नहीं है। इसके बावजूद आपके प्रश्न वैध नहीं हैं JPQL queries (लेकिन वैध एचक्यूएल हो सकता है - और यदि आपका जेपीए प्रदाता सहिष्णु है तो काम कर सकता है)।

ए (आंशिक) कार्यान्वयन की आवश्यकता है ताकि आप Query इंटरफ़ेस या मानदंड एपीआई का उपयोग कर सकें।

9

क्या उपयोगकर्ता "अपने" टिप्पणी में कहा करने के लिए +1:

"मौलिक समस्या को हल करने के लिए मानक तरीका PagingAndSortingRepository उपयोग करने के लिए है"

यहाँ एक उदाहरण है। मैं सिर्फ एक अतिरिक्त बोनस के रूप में छँटाई में फेंक कर रहा हूँ:

public interface ArtifactRepo extends JpaRepository<Artifact, Long> { 
    Page<Artifact> findByComponentKey(String componentKey, Pageable pageable); 
} 

(यदि आप चाहें तो इसके बाद के संस्करण @query उपयोग कर सकते हैं, लेकिन JPQL ही सीमा का समर्थन नहीं करता, के रूप में "अपने" का उल्लेख किया।)

फिर जब यह बुला, का उपयोग

PageRequest pageRequest = 
    new PageRequest(0, 1, Sort.Direction.DESC, "buildNumber"); 
Page<Artifact> artifactsPage = 
    artifactRepo.findByComponentKey(componentKey, pageRequest); 

मैं इस विषय है, जो मददगार साबित हो सकता पर विभिन्न ब्लॉग पोस्ट ने लिखा है:

http://springinpractice.com/blog/categories/chapter-02-data/

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