comment obtenir le compte avec une requête nommée, sans obtenir toute la liste (cela augmenterait les performances, je pense). C'est la requête nommée qui ne fonctionne pas:
@NamedQuery(name = "Charakteristika.findAllCount", query = "SELECT COUNT(c) FROM Charakteristika c")
Exécution de ceci:
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount", Integer.class).getSingleResult().intValue());
System.out.println("b");
Production:
a
Bien que cette requête fonctionne:
@NamedQuery(name = "Charakteristika.findAll", query = "SELECT c FROM Charakteristika c")
Exécution de ceci:
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size());
System.out.println("b");
Production:
a
11111
b
Changer votre code aime ça;
int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue();
System.out.println(count);
Vous pouvez également l'essayer: utilisez l'interface TypeQuery avec une valeur longue. Dans l'exemple suivant, la requête "PosicionHistorialDia.findNumberSpeeding" est un nombre jpa.
@Override
public Long findCount(String eventCode) {
TypedQuery<Long> query = em.createNamedQuery(
"PosicionHistorialDia.findNumberSpeeding",
Long.class);
query.setParameter("event", eventCode);
return query.getSingleResult();
}
Essayer:
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount").getSingleResult());
System.out.println("b");
Et voyez si sa sortie vous suggère quelque chose.
A défaut,
essayez getResultList
au lieu de getSingleResult
; sinon le même.
essayez createQuery("SELECT COUNT(c) FROM Charakteristika c").getSingleResult
& getResultList
Explorez les différences dans la déclaration des requêtes; comme le souligne JB, les requêtes sont les mêmes. Essayez donc les deux noms avec les différents formulaires ci-dessus.
Examinez comment vous construisez; cela fait-il partie d'une application déployée? autonome?
Quelque chose doit donner quelque part.