2011-11-02 8 views
12

मैंने हाइबरनेट + MySQL के लिए एक प्रोजेक्ट लिखा था। अब मैं इसे डर्बी पर भेज रहा हूं (कई कारणों से)।क्या एचक्यूएल के पास Restrictions.ilike (केस-असंवेदनशील मिलान के लिए) के बराबर है?

अब मुझे पता चला है कि प्रश्नों में LIKE का उपयोग करते समय डर्बी केस संवेदनशील है। इसे मानदंड प्रश्नों में Restrictions.ilike(...) का उपयोग करके हल किया जा सकता है ... लेकिन मेरे पास जटिल एचक्यूएल प्रश्न हैं जो इसका उपयोग करते हैं। क्या एचक्यूएल में ilike जैसी कार्यक्षमता रखने का कोई तरीका है?

+0

आप ** ** कह रहे हैं ** डर्बी डेटाबेस में एचक्यूएल काम नहीं करेगा? – ManuPK

+1

* * काम * की तरह, लेकिन केस संवेदनशील – gotch4

उत्तर

15

HQL में कोई ilike बराबर कार्यक्षमता नहीं है। चूंकि Konstantin पहले से ही अपने suggestion में इंगित कर चुका है, आपकी सबसे अच्छी पसंद tune the database connection है और collationTERRITORY_BASED:SECONDARY पर सेट करें, जैसा कि इस जिरा में बताया गया है: DERBY-1748: Global case insensitive setting

ध्यान में रखें कि सभी समानताएं (=) और like एस केस असंवेदनशील होंगे। यह थोड़ा सा दूर जा सकता है, और आपकी विशेष स्थिति के लिए उपयुक्त नहीं हो सकता है।

यह संबोधित करने का एक और तरीका फ़ंक्शन-आधारित इंडेक्स (यदि डर्बी उन्हें निश्चित रूप से समर्थन करता है) बना रहा है और like और lower को इस तरह जोड़ने के लिए अपने एचक्यूएल को ट्यून करेगा।

Query q = session.createQuery("... WHERE lower(entity.field) like ?)"); 
q.setString(0, '%' + variable.toLowerCase() + '%'); 

डर्बी एफबीआई (मैं यह नहीं है लगता है), तो आप भी कम मूल्यों और उन्हें सूचकांक के साथ ट्रिगर से भरे कॉलम बना सकते हैं समर्थन नहीं करता है।

अद्यतन यह रूप में यह अन्य JIRA में बताया गया है, व्युत्पन्न/स्वत: जनरेट की स्तंभों को परिभाषित करना संभव हो रहा है: JIRA-481: implement SQL generated columns

+0

लेकिन gotch4 अपने एचक्यूएल प्रश्नों को रखने के लिए पसंद करता है –

+0

यदि उसके पास कनेक्शन संयोजन बदलना नहीं है तो उसके पास कोई दूसरा विकल्प नहीं है। और मुझे समझ में आया कि वह उन्हें मानदंड प्रश्नों में बदलना नहीं चाहता है। –

+1

मैं उसे समझता हूं - एक रिफैक्टरिंग और –

2

मुझे डर है, एचक्यूएल के माध्यम से इसे हासिल करने का कोई तरीका नहीं है, क्योंकि इसका मूल मूल एसक्यूएल में अनुवाद किया गया है। मुझे लगता है कि यह ट्यूनिंग स्कीमा के द्वारा ही संभव हो सकता है:

http://old.nabble.com/case-insensitive-searching-td17756019.html

0

एक आसान तरीके को अपर केस (या लोअर केस) कुछ इस तरह करने के लिए करने के लिए दोनों शब्दों कन्वर्ट करने के लिए होगा: DomesticCat बिल्ली से

जहां ऊपरी (cat.name) 'एफआरआई%'

संदर्भ की तरह : http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

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