स्प्रिंग क्रूड रिपेरिटरी के साथ केस असंवेदनशील प्रश्न


102

स्प्रिंग क्रूड रिपेरिटरी क्वेरी के साथ; मैं "DeviceType" संस्थाओं को "नाम" संपत्ति के साथ चुनना चाहता हूं। लेकिन क्वेरी के बाद केस संवेदी तरीके से एंट्रिक्स का चयन करें। मैं इसे असंवेदनशील तरीके से कैसे बना सकता हूं। धन्यवाद।

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContaining(String name);

}  

16
क्या आपने कोशिश की public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
पीटर केलर

यदि आप क्वेरी में रुचि रखते हैं तो कृपया इसे आज़माएं, LIKE <code> @Query (value = "के बाद डिवाइस% से dt जहाँ निम्न (dt.name) जैसे लोअर (dt.name) का चयन करने के लिए '%' देने की आवश्यकता नहीं है (नाम) ) सार्वजनिक Iterable <DeviceType> anyMethodNameGoesHere (@Param (नाम) स्ट्रिंग नाम); </ code>
Java_Fire_Within

यह आपकी मदद कर सकता है, stackoverflow.com/questions/37178520/jpql-like-case-insensitive/…
शशांक

जवाबों:


197

टिप्पणी में उल्लिखित @Peter के समान, बस जोड़ें IgnoreCase:

public interface DeviceTypeRepository 
    extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
}  

विधि नामों के अंदर सभी समर्थित कीवर्ड की सूची के लिए दस्तावेज़ देखें ।


उत्तर के लिए बहुत बहुत धन्यवाद; यकीन है कि मैं उस दस्तावेज का उल्लेख करूंगा। धन्यवाद दे सकते हैं। बेहतर समय रहे !
चन्ना

3
इसने मेरे लिए काम किया। मैं JPA क्वेरी का उपयोग कर रहा था। तो प्रलेखन के अनुसार, जहाँ UPPER (x.firstame) = UPPER (? 1) काम करता है।
सुनीता

@sunitha क्या आप किसी भी तरह से जानते हैं कि हम इस व्यवहार को संशोधित कर सकते हैं, कहते हैं कि इसे कम करें? मेरे db में निचले मामले पर आधारित अनुक्रमण है
सुदीप भंडारी

@ सुदीपभंडारी: श्योर यू कैन।
सुनिता

1
कई गुणों के लिए IgnoreCaseइस तरह से List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
रिपीट

11

मेरे लिए निम्न स्प्रिंग डेटा मोंगो क्वेरी काम करती है। मैं Listइसके बजाय उपयोग करना पसंद करूंगाIterator

public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType> {
    List<DeviceType> findByNameIgnoreCase(String name);
} 

1

मेरे मामले में जोड़ने से IgnoreCaseकाम नहीं हुआ।

मैंने पाया कि नियमित अभिव्यक्ति के लिए विकल्प उपलब्ध कराना संभव है:

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);

iविकल्प क्वेरी केस-संवेदी बना देता है।


1

कस्टम JPA क्वेरी का उपयोग करने वालों के लिए ऊपरी कीवर्ड और toUpperCase मदद करता है। निम्नलिखित कोड मेरे लिए काम करता है

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();

1
'अपर (q.applicant)' का उपयोग करते समय सावधानी रखें। Postgres में इसका कारण बनता है '.PSQLException: ERROR: function Upper (bytea) मौजूद नहीं है' जब q.applicant अशक्त है
advortsov
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.