2013-01-12 30 views
8

मुझे SELECT ... FROM table_name WHERE id IN() क्वेरी जैसे कुछ एरे के रूप में आपूर्ति किए गए ids पर आधारित ओरेकल डेटाबेस से चुनी गई पंक्तियां लाने की आवश्यकता है।हाइबरनेट में setParameterList() विधि का उपयोग कैसे करें?

ऐसा करने के मेरे प्रयासों में, मैं अपने डीएओ में org.hibernate.setParameterList(String name, Object[] values) विधि का उपयोग करने की कोशिश कर रहा हूं।

@Service 
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW) 
public final class ProductImageDAO implements ProductImageService { 

    @SuppressWarnings("unchecked") 
    public List<Object[]> getFileName(String[] list) { 
     return sessionFactory 
       .getCurrentSession() 
       .createQuery("SELECT prodImageId, prodImage FROM ProductImage WHERE prodImageId=:list") 
       .setParameterList("list", list).list(); 
    } 
} 

दिया विधि में टाइप String[] के पैरामीटर संबंधित स्प्रिंग नियंत्रक वर्ग से आपूर्ति की है।

यह निम्नलिखित अपवाद को फेंकने का कारण बनता है।

org.hibernate.hql.ast.QuerySyntaxException: अप्रत्याशित टोकन:, लाइन 1, स्तंभ 78 के पास [prodImageId, prodImage चयन model.ProductImage से जहां prodImageId =: id0_,: id1_,: id2_,: id3_, : id4_,: id5_]

रास्ता ids की सूची हाइबरनेट के प्रयोग पर आधारित चयनित पंक्तियों को पुनः प्राप्त करने में क्या है?

उत्तर

20
String queryString = "select acc from cgix.trust.domain.PtbnAccount as acc where acc.accountId IN (:accountdIds)"; 
Query query = session.createQuery (queryString); 
query.setParameterList("accountIds", accountFilter); 

accountFilter मान लिया जाये कि एक List वस्तु है। ध्यान रखें कि आपको खाली सूचियां नहीं पारित करनी चाहिए क्योंकि इसके परिणामस्वरूप निम्न SQL (जो काम नहीं करेगा): ... WHERE xyz IN() ... (खाली इन-क्लॉज नोट करें)।

+0

हाँ मेरी HQL वाक्य रचना गलत था । 'ProdImageId =: id' जहां 'prodImageId in (: id)' काम किया है, को बदलकर। – Tiny

+6

अंतिम क्वेरी 'query.setParameterList (" accountIds ", खाताफिल्टर) होना चाहिए; ', नहीं? –

+0

फुकुजावा सही है, क्वेरी होना चाहिए .setParameterList ("accountIds", accountFilter), कृपया उत्तर – UCJava

3

समस्या यह है कि ज्यादातर लोगों को यहां चुने जाने कि वे अभी भी उपयोग करना चाहते हैं,

query.setParameter("accountIds", accountFilter); 

query.setParameterList("accountIds", accountFilter); 

उपयोग setParameterList() के बजाय

जब सूचियों के साथ काम कर

+0

को अद्यतन करें पैरामीटर पैरामीटर के रूप में स्ट्रिंग [] सरणी कैसे सेट करें – priyadarshini