में NVL अनुकरण करने के लिए मैं इस कोशिश की par1 अशक्त नहीं है।HQL
जबकि
select * from table where col1 = 'asdf'
किसी भी पंक्ति वापस नहीं करता है।
मैं देशी व्याकरण का उपयोग नहीं कर सकते क्योंकि अपने आवेदन विभिन्न डेटाबेस इंजन
में NVL अनुकरण करने के लिए मैं इस कोशिश की par1 अशक्त नहीं है।HQL
जबकि
select * from table where col1 = 'asdf'
किसी भी पंक्ति वापस नहीं करता है।
मैं देशी व्याकरण का उपयोग नहीं कर सकते क्योंकि अपने आवेदन विभिन्न डेटाबेस इंजन
HQL में nvl
आदेश के बराबर coalesce
आदेश है पर चलाने के लिए माना जाता है। coalesce(a,b)
a
वापस करेगा यदि a
शून्य नहीं है, अन्यथा b
।
तो तुम की तर्ज पर कुछ चाहते हैं:
from Table where col1 = coalesce(:par1, 'asdf')
यदि आपका अंतर्निहित डेटाबेस 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 फ़ंक्शन का उपयोग कर सकते हैं। उम्मीद है कि यह मदद करता है।
के साथ काम करता है ओपी ने उल्लेख किया है कि ऐप को विभिन्न डेटाबेस पर चलना है। इस मामले में, यह उत्तर अपेक्षित उत्तर नहीं है। – KNP
जो मैं वास्तव में चाहता था वह था: तालिका से जहां col1 = coalesce (: par1, col1) और यह काम किया! आपका बहुत बहुत धन्यवाद! –
coalesce() एक एएनएसआई एसक्यूएल फ़ंक्शन भी है, और अधिकांश डेटाबेस पर काम करना चाहिए, उदा। ओरेकल, मूल रूप से। – slu
जेपीए इकाई में भी क्वेरी नाम दिया गया है, यह एनवीएल के साथ काम नहीं करता है लेकिन coalesce – shareef