2012-08-10 3 views
26

सभी सूची प्राप्त किए बिना, नामांकित के साथ गिनने के लिए कैसे करें (यह मुझे लगता है कि प्रदर्शन में वृद्धि होगी)। यह नामित क्वेरी काम करता है कि नहीं:जेपीए गिनती NamedQuery

@NamedQuery(name = "Charakteristika.findAllCount", query = "SELECT COUNT(c) FROM Charakteristika c") 

इस निष्पादित:

System.out.println("a"); 
System.out.println(em.createNamedQuery("Charakteristika.findAllCount", Integer.class).getSingleResult().intValue()); 
System.out.println("b"); 

आउटपुट:

a 

हालांकि इस क्वेरी काम करता है:

@NamedQuery(name = "Charakteristika.findAll", query = "SELECT c FROM Charakteristika c") 

निष्पादित यह:

System.out.println("a"); 
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size()); 
System.out.println("b"); 

आउटपुट:

a 
11111 
b 
+2

@JBNizet प्रश्न समान हैं, निष्पादन अलग है। –

+0

मुझे बहुत खेद है, समस्या अभी भी वही है, बस गलत वर्तनी दूसरी क्वेरी। – Minutis

+0

@JBNizet दूसरा निष्पादन परिणाम प्रकार को 'Charakteristika.class' के रूप में निर्दिष्ट करता है; मैं अनुमान लगा रहा हूं कि चीजों को फेंक रहा है, प्रत्येक 'एन' पंक्तियों के लिए गिनती लौटा रहा है। –

उत्तर

32

अपना कोड इस तरह बदलें;

 int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue(); 
     System.out.println(count); 
+2

वह संख्या वर्ग क्या है जिसे आप परिणाम भी दे रहे हैं? यह नहीं होना चाहिए (int)? –

1

प्रयास करें:

System.out.println("a"); 
System.out.println(em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()); 
System.out.println("b"); 

और देखें कि क्या वह उत्पादन आप के लिए कुछ भी पता चलता है है।

उसमें असफल होने पर

  • getResultList बजाय getSingleResult कोशिश; अन्यथा वही।

  • कोशिश createQuery("SELECT COUNT(c) FROM Charakteristika c").getSingleResult & getResultList

  • प्रश्नों की घोषणा में अंतर को समझें; जैसा कि जेबी बताता है, प्रश्न समान हैं। तो उपरोक्त विभिन्न रूपों के साथ दोनों नामों को आजमाएं।

  • जांचें कि आप कैसे बना रहे हैं; एक तैनात ऐप का यह हिस्सा है? स्टैंड-अलोन?

कुछ कहीं देना होगा।

+0

नहीं। कोई परिणाम नहीं, कोई त्रुटि नहीं, केवल "ए" आउटपुट के बाद लटकती है। – Minutis

4

इसके अलावा आप इसे आजमा सकते हैं: LongQuery के साथ TypeQuery इंटरफ़ेस का उपयोग करें। अगले उदाहरण में, "PosicionHistorialDia.findNumberSpeeding" क्वेरी एक जेपीए गिनती है।

@Override 
    public Long findCount(String eventCode) { 
     TypedQuery<Long> query = em.createNamedQuery(
      "PosicionHistorialDia.findNumberSpeeding", 
      Long.class); 
     query.setParameter("event", eventCode); 
     return query.getSingleResult(); 
    }