2012-08-10 14 views
26

come ottenere il conteggio con un nomequery, senza ottenere tutta la lista (aumenterebbe le prestazioni credo). Questa è la query di nome che non funziona:Conteggio JPA NamedQuery

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

L'esecuzione di questo:

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

uscita:

a 

Anche se questa domanda funziona:

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

Esecuzione questo:

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

uscita:

a 
11111 
b 
+2

@JBNizet Le query sono le stesse, l'esecuzione è diversa. –

+0

Mi dispiace molto, il problema è sempre lo stesso, ho appena scritto una seconda query errata. – Minutis

+0

@JBNizet La seconda esecuzione specifica il tipo di risultato come 'Charakteristika.class'; Sto indovinando che sta buttando via le cose, restituendo un conteggio per ciascuna delle righe 'N'. –

risposta

32

Modificare il codice piace questo;

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

Qual è la classe numero in cui stai trasmettendo il risultato? Non dovrebbe essere (int)? –

1

Prova:

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

E vedere se è uscita suggerisce niente.

In mancanza di questo,

  • provare getResultList invece di getSingleResult; altrimenti lo stesso.

  • provare createQuery("SELECT COUNT(c) FROM Charakteristika c").getSingleResult & getResultList

  • Esplora differenze nella dichiarazione di query; come sottolinea JB, le query sono le stesse. Quindi prova entrambi i nomi con le diverse forme sopra.

  • Esamina come stai costruendo; è questa parte di un'app distribuita? indipendente, autonomo?

Qualcosa deve dare da qualche parte.

+0

No. Nessun risultato, nessun errore, lascia solo sospeso dopo l'output di "a". – Minutis

4

Inoltre, è possibile provarlo: utilizzare l'interfaccia TypeQuery con valore Long. Nel prossimo esempio, la query "PosicionHistorialDia.findNumberSpeeding" è un conteggio jpa.

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