una sirven que para operadores las función funciones funcion consulta clausulas avg agregado agregada agregación agregacion java sql jpa

java - operadores - para que sirven las funciones de agregacion



JPA y funciones agregadas. ¿Cómo uso el resultado de la consulta? (1)

Soy nuevo en materia de ORM y necesito ayuda para entender algo.

Supongamos que tengo la siguiente consulta SQL estándar:

SELECT *, COUNT(test.testId) AS noTests FROM inspection LEFT JOIN test ON inspection.inspId = test.inspId GROUP BY inspection.inspId

que quiero usar en JPA.

Tengo una entidad de inspección con una relación uno a muchos con una entidad de prueba. (una inspección tiene muchas pruebas) Intenté escribir esto en JPQL:

Query query = em.createQuery("SELECT insp, COUNT(???what???) " + "FROM Inspection insp LEFT JOIN insp.testList " + "GROUP BY insp.inspId");

1) ¿Cómo escribo la cláusula COUNT? Tendría que aplicar recuento a los elementos de la tabla de prueba, pero testList es una colección, por lo que no puedo hacer algo como COUNT(insp.testList.testId)

2) Suponiendo que se resuelva 1, qué tipo de objeto se devolverá. Definitivamente no será un objeto de inspección ... ¿Cómo uso el resultado?


  1. Puede dar un alias a la entidad unida (con AS )
  2. Puede crear un nuevo objeto o una List con los valores devueltos

Asi que:

SELECT new com.yourproject.ResultHolder(insp, COUNT(test.testId)) FROM Inspection insp LEFT JOIN insp.testList AS test GROUP BY insp.inspId

O

SELECT new list(insp, COUNT(test.testId)) FROM Inspection insp LEFT JOIN insp.testList AS test GROUP BY insp.inspId

El resultado se puede acceder como una instancia de ResultHolder o como java.util.List , donde el insp es list.get(0) y el conteo es list.get(1)