% वसंत JpaRepository में% क्वेरी की तरह


110

मैं एक क्वेरी लिखना चाहता हूं, JpaRepositoryलेकिन यह कुछ भी वापस नहीं कर रहा है:

LIKE '%place%'-यह काम नहीं कर रहा है।

LIKE 'place' अच्छी तरह से काम।

यहाँ मेरा कोड है:

@Repository("registerUserRepository")
public interface RegisterUserRepository extendsJpaRepository<Registration,Long> {

    @Query("Select c from Registration c where c.place like :place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}

जवाबों:


199

स्प्रिंग डेटा JPA क्वेरी को "%" वर्णों के साथ-साथ likeआपकी क्वेरी में निम्न स्थान के लिए भी जगह चाहिए

@Query("Select c from Registration c where c.place like %:place%")

सी एफ http://docs.spring.io/spring-data/jpa/docs/current/reference/html

आप @Queryएनोटेशन से पूरी तरह छुटकारा पा सकते हैं , जैसा कि मानक क्वेरी (स्वचालित रूप से स्प्रिंग डेटा प्रॉक्सी द्वारा लागू) से मिलता-जुलता लगता है; अर्थात सिंगल लाइन का उपयोग करना

List<Registration> findByPlaceContaining(String place);

काफी है।


23
किसी क्वेरी के लिए मामले को अनदेखा करना भी उपयोगी हो सकता है, इसका उपयोग करें: findByPlaceIgnoreCaseContain (स्ट्रिंग स्थान);
तैलया

बस एक टिप्पणी के रूप में - आप मिश्रण और मैच% नहीं कर सकते: समान क्वेरी के अंदर% परम% के साथ परम%। अन्यथा ऐप भी शुरू नहीं होगा।
आरवीपी

धन्यवाद। मैं के like '%:place%'साथ लिखता था 'और वहाँ कोई परिणाम नहीं थे, क्योंकि हाइबरनेट 'खुद से तार जोड़ता है।
यमशिरो रियोन

यह एक अच्छी प्रतिक्रिया नहीं है और यह संभावित रूप से खतरनाक भी है। स्प्रिंग ने ContainingIgnoreCase के साथ यह हल किया है, मेरे उत्तर को देखें।
एलेक्सियस DIAKOGIANNIS

99

आप वास्तव में जरूरत नहीं है @Query एनोटेशन की ।

आप बस निम्नलिखित का उपयोग कर सकते हैं

    @Repository("registerUserRepository")
    public interface RegisterUserRepository extends JpaRepository<Registration,Long>{

    List<Registration> findByPlaceIgnoreCaseContaining(String place);

    }

मेरे लिए यह सबसे अच्छा उपाय है। मुझे नहीं पता था कि आप Contore के साथ संयुक्त IgnoreCase का उपयोग कर सकते हैं, यह प्रलेखन में नहीं है।
विल्सन कैंपसैनो

1
जब मैं कई स्तंभों का उपयोग करना चाहता हूं, तो उस मामले के बारे में क्या? - मेरा मानना @Query()है कि एक चाहिए, है ना? उस दृष्टिकोण के साथ मुझे यह करना होगा orकि वास्तव में उस मामले के लिए एक अच्छी तरह से अनुकूल समाधान नहीं है:findByField1OrField2Containg(String phraseForField1, String phraseForField2)
user3529850

26

आप स्प्रिंग डेटा JPA समर्थित कीवर्ड "युक्त" का उपयोग करके समान प्रश्नों को भी लागू कर सकते हैं ।

List<Registration> findByPlaceContaining(String place);

20

आपके मामले के लिए, आप सीधे जेपीए विधियों का उपयोग कर सकते हैं। यह बलो की तरह है:

युक्त: चुनें ... जैसे%: जगह%

List<Registration> findByPlaceContainingIgnoreCase(String place);

यहाँ, IgnoreCase आपको मामले की अनदेखी करने के साथ आइटम खोजने में मदद करेगा।

JPQL में @Query का उपयोग करना :

@Query("Select registration from Registration registration where 
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);

यहाँ कुछ संबंधित तरीके दिए गए हैं:

  1. पसंद findByPlaceLike

    ... जहां x.place पसंद है? 1

  2. के साथ शुरू findByPlaceStartingWith

    ... जहां x.place की तरह? 1 (पैरामीटर संलग्न% के साथ)

  3. EndingWith findByPlaceEndingWith

    ... जहां x.place पसंद है? 1 (प्रीपेड% के साथ बाध्य पैरामीटर)

  4. युक्त findByPlaceContaining

    ... जहां x.place पसंद है? 1 (पैरामीटर बाउंड लिपटे%)

अधिक जानकारी, इस लिंक , इस लिंक और इसे देखें

आशा है कि यह आपकी मदद करेगा :)


6

आपके पास प्लेसहोल्डर्स का उपयोग करने का एक विकल्प हो सकता है:

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);

4

इसे इस्तेमाल करे।

@Query("Select c from Registration c where c.place like '%'||:place||'%'")

यदि हम उपयोग करते हैं something=:placeऔर another like %:place%क्वेरी में सहायक होते हैं ।
hong4rc

1

जब कॉल फ़ंक्शंस, मैं उपयोग: findByPlaceContaining("%" + place);

या: findByPlaceContaining(place + "%");

या: findByPlaceContaining("%" + place + "%");


1

जवाब बिल्कुल होगा

-> `@Query (" श्रेणी यू से चयन करें जहां u.categoryName%: इनपुट% ")
     सूची findAllByInput (@Param ("इनपुट") स्ट्रिंग इनपुट);

0

बिना समाधान मिला @Query(वास्तव में मैंने कोशिश की कि कौन सा "स्वीकार किया गया" है। हालांकि, यह काम नहीं किया)।

Page<Entity>इसके बदले लौटना होगा List<Entity>:

public interface EmployeeRepository 
                          extends PagingAndSortingRepository<Employee, Integer> {
    Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}

IgnoreCase यह हासिल करने के लिए महत्वपूर्ण था!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.