2014-07-09 8 views
15

वसंत-डेटा जेपीए में, वैसे भी एक विधि क्वेरी बनाने के लिए है जो अनिवार्य रूप से खोज करता है ??स्प्रिंगडाटा जेपीए रिपोजिटरी विधि क्वेरी जैसा है?

मैं निम्न विधि क्वेरी

public MakeModel findByModelIgnoreCase(String model); 

क्या मैं सच में चाहते हैं एक तरह अभिव्यक्ति है। क्या मुझे सिर्फ मानदंड या @Query एनोटेशन बनाने की आवश्यकता है? क्या मेरी मांग बहुत ज़्यादा है?

//Stupid example of what I want to be able to do 

    public MakeModel findByFuzzyModelIgnoreCase(String model); 

वास्तव में मुझे लगता है कि इसके दिल में, मैं एक टेबल खोज करना चाहता हूं। मैं स्प्रिंग डेटा के नीचे हाइबरनेट का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि मैं कुछ खोज एपीआई का उपयोग हाइबरनेट खोज की तरह कर सकता हूं। मैं यहां सिफारिशों के लिए खुला हूं।

+0

जेपीक्यूएल की तरह है: https://blogs.oracle.com/JPQL01/entry/how_to_use_like_expression –

+1

http://docs.spring.io/spring-data/jpa/docs/1.6.1.RELEASE/reference/ एचटीएमएल/jpa.repositories.html # jpa.query-methods.query-construction – axtavt

+0

एक्स्टावैट जो मुझे चाहिए ... – chrislhardin

उत्तर

20

जैसा भी समर्थित है: शुरू में "%" जोड़े कहना है कि यह एक सख्त शुरुआत मैच, पर ही हो कोई फर्क नहीं पड़ता:

MakeModel findByModelLikeIgnoreCase(String model); 

जब आप फोन विधि follwing का उपयोग अंत, या आप उनमें से एक का उपयोग कर सकते हैं यह आपके जैसा चाहता है पर निर्भर करता है।

MakeModel makeModel = findByModelLikeIgnoreCase("%"+model+"%"); 

यदि आपका मेकअप मॉडल test है और करने के लिए तुलना करने के लिए स्ट्रिंग तो "%"+model+"%" है:

es is a match , T is a match , test is a match 

की तुलना करने के स्ट्रिंग model+"%" है:

te is a match , es is not . 
+4

महान जवाब! आप 'युक्त'/'युक्त' कीवर्ड का उल्लेख करना चाहेंगे जो ऐसा करते हैं लेकिन क्लाइंट को विशेष स्टोर के लिए सिंटैक्स के बारे में जागरूक होने की आवश्यकता नहीं होती है। –

23

ऐसा न करने पर मैन्युअल रूप से "%" जोड़ना चाहते हैं, आप निम्न क्वेरी विधियों का उपयोग कर सकते हैं:

MakeModel findByModelStartingWithIgnoreCase(String model); //SQL => LIKE 'model%' 
MakeModel findByModelEndingWithIgnoreCase(String model); //SQL => LIKE '%model' 
MakeModel findByModelContainingIgnoreCase(String model); //SQL => LIKE '%model%' 
+0

1 छोटा विवरण, IgnoreCase => ILIKE – dwana

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