2012-06-12 4 views
6

यह सरल क्वेरीहाइबरनेट java.lang.IllegalArgumentException देने क्वेरी: पार करने के लिए नोड खाली नहीं रह सकती

session = com.jthink.songlayer.hibernate.HibernateUtil.getSession(); 
Query q = session.createQuery("recNo from SongChanges"); 

इस स्टैकट्रेस

java.lang.IllegalArgumentException: node to traverse cannot be null! 
    at org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:272) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:119) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:214) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:192) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1537) 

दे रही है अगर मैं

session = com.jthink.songlayer.hibernate.HibernateUtil.getSession(); 
Query q = session.createQuery("from SongChanges"); 

मैं न करना त्रुटि प्राप्त करें, लेकिन मुझे केवल रिकनो

की आवश्यकता है

कोई विचार?

उत्तर

12

आप चुनिंदा भूल गया:

Query q = session.createQuery("select sc.recNo from SongChanges sc"); 
+0

मुझे लगता है कि सोचा था hsql –

+3

@ijabz चुनिंदा खंड (जिसका अर्थ है कि शब्द का चयन करें और फ़ील्ड जिन्हें आप चुनना चाहते हैं) के लिए आवश्यक नहीं है। लेकिन फिर आपको "से" शुरू करना होगा और आपको इकाई मिल जाएगी। यदि आप विशिष्ट फ़ील्ड का चयन करना चाहते हैं, तो आपको चयन करना होगा। – Pablo

+2

आह, ठीक है धन्यवाद। जहां मुझे लगता है कि हाइबरनेट गिरता है कि यदि कोई समस्या है तो उत्पन्न होने वाले त्रुटि संदेश शायद ही कभी बहुत उपयोगी होते हैं। –

0

SELECT खंड परिणाम खंड से से सेट पर अधिक नियंत्रण प्रदान करता है। यदि आप पूर्ण ऑब्जेक्ट की बजाय ऑब्जेक्ट्स के कुछ गुण प्राप्त करना चाहते हैं, तो चयन खंड का उपयोग करें। निम्न का चयन करें खंड का उपयोग कर बस कर्मचारी ऑब्जेक्ट के क्षेत्र का नाम पाने के लिए की सरल वाक्य रचना है:

String hql = "SELECT E.name FROM Employee E"; 
Query query = session.createQuery(hql); 
List results = query.list(); 

आप पूरी वस्तु उस समय चाहते हैं "का चयन करें * से" की जरूरत नहीं है।

2

यह त्रुटि भी आमतौर पर होता है जब आप विधि createQuery एक नामित क्वेरी चलाने के लिए, getNamedQuery के उदाहरण के लिए उपयोग करने के बजाय,:

session.createQuery("InvoiceItem.itemsFromInvoice") 

जब सही दृष्टिकोण होगा

session.getNamedQuery("InvoiceItem.itemsFromInvoice") 
संबंधित मुद्दे