2009-06-07 14 views
72

यह मानते हुए कि मैं निम्नलिखित HQL क्वेरी लिखना चाहते हैं:उचित तरीका

FROM Cat c WHERE c.id IN (1,2,3) 

क्या एक parametrized क्वेरी, उदा के रूप में इस लेखन के उचित तरीके से है

FROM Cat c WHERE c.id IN (?) 

उत्तर

118

मैं कैसे स्थितीय पैरामीटर के साथ ऐसा करने को लेकर अनिश्चित हूं, लेकिन अगर आप स्थितीय, तो नामित पैरामीटर के बजाय नाम वाले पैरामीटर का उपयोग कर सकते कोष्ठक के अंदर रखा जा सकता है और Query इंटरफ़ेस से setParameterList विधि सूची बाध्य करने के लिए इस्तेमाल किया जा सकता इस पैरामीटर के मूल्यों के। हाइबरनेट की

... 
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)"); 
query.setParameterList("ids", listOfIds); 
... 
10

पुराने संस्करण Query पर setParameterList विधि नहीं हो सकता है। आप अभी भी उसी प्रभाव के लिए पुराने पर setParameter("ids", listOfIds); पर कॉल कर सकते हैं।

+5

क्यों वैसे भी बदल दिया गया है? बस एक घंटा बिताया कि क्यों 'अवैध अवैध श्रेणी कक्षा में: org.ase.mip.persistence.entities.BaseEntityImpl, संपत्ति का गेटर विधि: आईडी (BasicPropertyAccessor.java:186)) 'हो रहा था। मैंने 'सेट पैरामीटर लिस्ट' के बजाय 'सेट पैरामीटर' कहा। DOH! – opncow

-3

नामित पैरामीटर स्थितित्मक मानकों से बेहतर हैं, हमें आदेश/स्थिति को देखने में सावधान रहना चाहिए - जबकि नाम आसान है।

नाम:

Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord"); 
     query.setString("userName", userName); 
     query.setString("passWord", passWord); 

स्थितीय:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and e.empDepartment = ?"); 
query.setParameter(1, employeId); 
query.setParameter(2, empDepartment); 
+2

पूरी तरह से सहमत हैं, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है (...) प्रश्न –

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