2013-01-10 22 views
10
तरह

मैं हाइबरनेट मापदंड/आंशिक कीवर्ड के साथ प्रतिबंध like का उपयोग कर postgres क्वेरी करने के लिए कोशिश कर रहा हूँ। मैं हाइबरनेट में आंशिक प्रतिबंधों का उपयोग कैसे करूं?हाइबरनेट प्रतिबंध

संपादित करें:

public static List<Object> createQueryStringByRegex(Criteria cri, 
     Parameters p) { 
    String value = (String) p.value; 
    if (value.contains("*")) { 
     value = value.replace("*", "%"); 
    } else { 
     value += "%"; 
    } 
    // System.out.println("Value: "+value); 
    Criterion c1 = Restrictions.ilike(p.property, value); 
    cri.add(c1); 

    return cri.list(); 

} 

उत्तर

44

इसके साथ आप मदद करने के लिए enum MatchMode का प्रयोग करें। और यदि आप एक केस-असंवेदनशील चाहते हैं, तो ilike का उपयोग करें।

+0

'ilike' का उपयोग नहीं करता है अगर अंतर्निहित डीबी इसका समर्थन करता है? अर्थात। Postgres ilike का समर्थन करता है लेकिन अन्य नहीं हो सकता है? – mmcrae

+1

मुझे विश्वास नहीं है, कम से कम दस्तावेज में इसके बारे में कुछ भी नहीं है। शायद ही हाइबरनेट स्वयं ही इस सुविधा को प्रदान करता है। –

+0

अपने प्रश्न के लिए, 'MatchMode'' MatchMode.START' नहीं होना चाहिए? – DanielK

9

प्रतिबंध प्रतिशत प्रतीक का उपयोग करना चाहिए: यह कुछ इस तरह करने से काम कर मिल गया। *

Criterion c1 = Restrictions.like("stateName", "Virg", MatchMode.END); 

की तरह, किसी भी विशेष वर्ण का उपयोग न करें:

Criterion c1 = Restrictions.like("stateName", "Virg%"); 
+2

यदि आप जूलियानो के उत्तर द्वारा सुझाए गए अनुसार 'MatchMode' का उपयोग करते हैं तो आप भविष्य में चुनने या माइग्रेट करने के लिए डेटाबेस को और अधिक लचीला बनाते हैं। – DanielK

+0

बस मैचमोड का उपयोग करें, यह एपीआई का उपयोग पहली जगह में करने का एक कारण है, जो आपके कोड के लिए डेटाबेस अज्ञेयवादी है! – Willa

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