Me gusta la idea de las Consultas con nombre en JPA para las consultas estáticas que voy a hacer, pero a menudo quiero obtener el resultado del conteo para la consulta, así como una lista de resultados de algún subconjunto de la consulta. Prefiero no escribir dos NamedQueries casi idénticas. Idealmente, lo que me gustaría tener es algo así como:¿Hay alguna manera de obtener el tamaño de conteo para una consulta con nombre JPA con un conjunto de resultados?
@NamedQuery(name = "getAccounts", query = "SELECT a FROM Account")
.
.
Query q = em.createNamedQuery("getAccounts");
List r = q.setFirstResult(s).setMaxResults(m).getResultList();
int count = q.getCount();
Así que digamos que m es 10, s es 0 y hay 400 filas en cuenta. Esperaría tener una lista de 10 elementos, pero me gustaría saber que hay 400 filas en total. Podría escribir un segundo @NamedQuery:
@NamedQuery(name = "getAccountCount", query = "SELECT COUNT(a) FROM Account")
pero parece una violación DRY para hacer eso si estoy siempre solo va a querer el recuento. En este caso simple, es fácil mantener los dos sincronizados, pero si la consulta cambia, parece menos que ideal que tenga que actualizar ambos @NamedQueries para mantener los valores en línea.
Un caso de uso común aquí sería buscar algún subconjunto de los elementos, pero que necesitan alguna forma de indicar el recuento total ("Mostrando 1-10 de 400").
finalmente resolviendo la solución para namedQueries también! gracias – Zavael
Interesante, ni siquiera sabía que podía hacer referencia a finales estáticos cuando configuraba anotaciones. Sin embargo, creo que una solución que no requiera dos consultas específicas separadas sería ideal. – aroth