HQL

2009-03-02 17 views
27

में NVL अनुकरण करने के लिए मैं इस कोशिश की par1 अशक्त नहीं है।HQL

जबकि

select * from table where col1 = 'asdf' 

किसी भी पंक्ति वापस नहीं करता है।

मैं देशी व्याकरण का उपयोग नहीं कर सकते क्योंकि अपने आवेदन विभिन्न डेटाबेस इंजन

उत्तर

58

HQL में nvl आदेश के बराबर coalesce आदेश है पर चलाने के लिए माना जाता है। coalesce(a,b)a वापस करेगा यदि a शून्य नहीं है, अन्यथा b

तो तुम की तर्ज पर कुछ चाहते हैं:

from Table where col1 = coalesce(:par1, 'asdf') 
+2

जो मैं वास्तव में चाहता था वह था: तालिका से जहां col1 = coalesce (: par1, col1) और यह काम किया! आपका बहुत बहुत धन्यवाद! –

+2

coalesce() एक एएनएसआई एसक्यूएल फ़ंक्शन भी है, और अधिकांश डेटाबेस पर काम करना चाहिए, उदा। ओरेकल, मूल रूप से। – slu

+0

जेपीए इकाई में भी क्वेरी नाम दिया गया है, यह एनवीएल के साथ काम नहीं करता है लेकिन coalesce – shareef

3

यदि आपका अंतर्निहित डेटाबेस Oracle तो आप NVL समारोह का उपयोग कर सकते है, मैं इसे करने की कोशिश की और यह मेरे लिए काम किया।

Query query = session.createQuery(
        " select ft from FeatureToggle ft left outer join ft.featureToggleCustomerMap " 
        + " ftcm where nvl(ftcm.custId,:custId) = :custId"); 

query.setParameter("custId", Long.valueOf(custId)); 

आपके उपयोग के मामले अलग हो सकता है और आप के रूप में मैं केवल ओरेकल के लिए इस कोड का इस्तेमाल किया है, यदि डेटाबेस NVL, अन्य डेटाबेस के implecation बारे में निश्चित नहीं है अपने आवश्यकता के अनुसार NVL फ़ंक्शन का उपयोग कर सकते हैं। उम्मीद है कि यह मदद करता है।

+1

के साथ काम करता है ओपी ने उल्लेख किया है कि ऐप को विभिन्न डेटाबेस पर चलना है। इस मामले में, यह उत्तर अपेक्षित उत्तर नहीं है। – KNP

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