java - namedquery - usar named query jpa
Cuenta de JPA NamedQuery (3)
cómo obtener el conteo con una consulta detallada, sin obtener toda la lista (aumentaría el rendimiento, creo). Esta es la consulta nombrada que no funciona:
@NamedQuery(name = "Charakteristika.findAllCount", query = "SELECT COUNT(c) FROM Charakteristika c")
Ejecutando esto:
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount", Integer.class).getSingleResult().intValue());
System.out.println("b");
Salida:
a
Aunque esta consulta funciona:
@NamedQuery(name = "Charakteristika.findAll", query = "SELECT c FROM Charakteristika c")
Ejecutando esto:
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size());
System.out.println("b");
Salida:
a
11111
b
Cambie su código le gusta esto;
int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue();
System.out.println(count);
También puedes probarlo: usa la interfaz TypeQuery con Long value. En el siguiente ejemplo, la consulta "PosicionHistorialDia.findNumberSpeeding" es un recuento de jpa.
@Override
public Long findCount(String eventCode) {
TypedQuery<Long> query = em.createNamedQuery(
"PosicionHistorialDia.findNumberSpeeding",
Long.class);
query.setParameter("event", eventCode);
return query.getSingleResult();
}
Tratar:
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount").getSingleResult());
System.out.println("b");
Y mira si la salida te sugiere algo.
Fallando en eso,
prueba
getResultList
lugar degetSingleResult
; de lo contrario, lo mismo.intente
createQuery("SELECT COUNT(c) FROM Charakteristika c").getSingleResult
&getResultList
Explore las diferencias en la declaración de consultas; como señala JB, las consultas son las mismas. Por lo tanto, pruebe ambos nombres con las diferentes formas anteriores.
Examina cómo estás construyendo; ¿Es esta parte de una aplicación implementada? ¿ser único?
Algo tiene que dar en alguna parte.