Saltar al contenido

¿Qué devuelve JPA EntityManager.getSingleResult () para una COUNT consulta?

Por fin después de tanto luchar hemos dado con la contestación de esta problema que tantos usuarios de nuestra web tienen. Si deseas compartir algo no dejes de dejar tu conocimiento.

Solución:

Según la especificación JPA, COUNT devuelve un Long:

4.8.4 Funciones agregadas en la cláusula SELECT El resultado de una consulta

puede ser el resultado de una función agregada aplicada a una expresión de ruta.

Las siguientes funciones agregadas se pueden utilizar en la cláusula SELECT de una consulta: AVG, COUNT, MAX, MIN, SUM.

Para todas las funciones agregadas excepto COUNT, la expresión de ruta que es el argumento de la función agregada debe terminar en un campo de estado. El argumento de la expresión de ruta de COUNT puede terminar en un campo de estado o en un campo de asociación, o el argumento de COUNT puede ser una variable de identificación.

Los argumentos de las funciones SUM y AVG deben ser numéricos. Los argumentos de las funciones MAX y MIN deben corresponder a tipos de campo de estado ordenables (es decir, tipos numéricos, string tipos, tipos de caracteres o tipos de fecha).

El tipo de Java contenido en el resultado de una consulta que utiliza una función agregada es el siguiente:

  • COUNT devuelve Long.
  • MAX, MIN devuelven el tipo de campo de estado al que se aplican.
  • AVG devuelve Double.
  • SUM devuelve Long cuando se aplica a campos de estado de tipos integrales (distintos de BigInteger); Doble cuando se aplica a campos de estado de tipos de coma flotante; BigInteger cuando se aplica a campos de estado de tipo BigInteger; y BigDecimal cuando se aplica a campos de estado de tipo BigDecimal.

Si se usa SUM, AVG, MAX o MIN, y no hay valores a los que se pueda aplicar la función agregada, el resultado de la función agregada es NULL.

Si se usa COUNT y no hay valores a los que se pueda aplicar COUNT, el resultado de la función agregada es 0.

El argumento de una función agregada puede estar precedido por la palabra clave DISTINCT para especificar que los valores duplicados deben eliminarse antes de que se aplique la función agregada.

Los valores nulos se eliminan antes de que se aplique la función agregada, independientemente de si se especifica la palabra clave DISTINCT.

Las consultas nativas pueden devolver diferentes objetos por COUNT según el controlador de la base de datos; sin embargo, todos esos objetos amplían java.lang.Number, que implementa el método longValue ().

NB: hay una diferencia entre JQPL y Nativo consulta

Query query = em.createQuery("SELECT COUNT(p) FROM PersonEntity p " );

query.getSingleResult().getClass().getCanonicalName() -> java.lang.Long

Query query = em.createNativeQuery("SELECT COUNT(*) FROM PERSON " );

query.getSingleResult().getClass().getCanonicalName() -> java.math.BigInteger

Te mostramos las reseñas y valoraciones de los usuarios

Eres capaz de favorecer nuestra misión añadiendo un comentario o dejando una puntuación te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *