डेटाबेस (तैयार किए गए बयान) में पैरामीटरयुक्त प्रश्न होने पर, पैरामीटर को मान निर्दिष्ट करने से क्वेरी की संरचना और निष्पादन पथ नहीं बदलना चाहिए (अन्यथा डेटाबेस उन्हें पैरामीटरयुक्त प्रश्नों के रूप में नहीं मानते हैं और अपवाद फेंक देंगे)।
इसलिए आप जैसे प्रश्नों के लिए कथन तैयार नहीं कर सकते हैं:
select * from myTable order by ?
. से * चुनेंselect id, f1, ? from myTable
. सेselect * from ?
।
क्योंकि प्रत्येक पैरामीटर के लिए एक मान निर्दिष्ट करने से क्वेरी निष्पादन पथ बदल जाता है (याद रखें कि तैयार किए गए कथनों की क्वेरी को एक बार पार्स किया जाता है और एक निष्पादन पथ का परिणाम होता है)।
हाइबरनेट क्वेरी पार्सर पर समान नियम लागू होते हैं, आप पैरामीटर को एक मान निर्दिष्ट नहीं करेंगे जो क्वेरी संरचना को बदलता है।
मानों के साथ एक स्ट्रिंग असाइन करना 1, 2, 3
एक SHOULD-TO-BE-A-NUMBER पैरामीटर के लिए बस वही है, वास्तव में पहली क्वेरी का अनुवाद उसी तरह किया जाएगा जैसे update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
लेकिन दूसरे का अनुवाद update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
के रूप में किया जाएगा। , स्पष्ट रूप से अलग-अलग निष्पादन पथों के साथ अलग-अलग प्रश्न।
तो अगर हाइबरनेट ने अपवाद नहीं फेंका है, तो भी आपका डेटाबेस होगा।