web-dev-qa-db-fra.com

Nombre JPA NamedQuery

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
28
Minutis

Changer votre code aime ça;

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

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();
    }
4
Gaalvarez

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.

1
Richard Sitze