2009-05-06 16 views
11

में इन क्लॉज का उपयोग करके हम एक जेपीए इकाई को वापस करने के लिए देशी एसक्यूएल क्वेरी के लिए गतिशील रूप से एक आईएन क्लॉज उत्पन्न करने की कोशिश कर रहे हैं। हाइबरनेट हमारे जेपीए प्रदाता है। हमारा कोड ऐसा कुछ दिखता है।देशी एसक्यूएल क्वेरी

@NamedQuery(
    name="fooQuery", 
    queryString="select f from Foo f where f.status in (?1)" 
) 

.... 

Query q = entityManager.createNamedQuery("fooQuery"); 
q.setParameter(1, "('NEW','OLD')"); 
return q.getResultList(); 

यह काम नहीं करता है, खंड में इस तरीके से पारित किसी भी मूल्य को पहचान नहीं है। क्या किसी को इस समस्या के समाधान के बारे में पता है?

+0

जहां अपनी मूल एसक्यूएल क्वेरी है? –

उत्तर

15

जेपीए, नामित सूची मानकों का समर्थन करता है आपके मामले में:

@NamedQuery(
    name="fooQuery", 
    queryString="select f from Foo f where f.status in (?1)" 
) 

Query q = entityManager.createNamedQuery("fooQuery"); 

List<String> listParameter = new ArrayList<>(); 
listParameter.add("NEW"); 
listParameter.add("OLD"); 

q.setParameter(1, listParameter); 
return q.getResultList(); 
0

मैं आपकी क्वेरी के लिए एक समग्र पैरामीटर का उपयोग न करने की सलाह दूंगा, लेकिन इसे अलग-अलग विभाजित करने की सलाह दूंगा। ('NEW','OLD') निर्दिष्ट न करें; 'NEW' और 'OLD' के अलग-अलग पैरामीटर निर्दिष्ट करें। इससे मदद मिल सकती है।

यह निश्चित रूप से समस्याएं पैदा कर सकता है यदि आपकी पैरामीटर की लंबाई अपरिभाषित है।

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