JPA - Lenguaje JPQL II (continuación)

Publicado el 06 enero 2016 por Miguel Miguel Gómez Cuesta @mgomezcuesta

Tipos de Sentencias:

  1. SENTENCIAS SELECT
  2. SENTENCIAS AGGREGATE
  3. SENTENCIAS UPDATE
  4. SENTENCIAS DELETE

Seguimos aprendiendo sobre el resto de sentencias que podemos encontrarnos: Aggregate, Update y Delete

SENTENCIAS AGREGADAS

CLÁUSULA SELECT

Se pueden utilizar 5 funciones agregadas en la cláusula SELECT AVG, COUNT, MAX, MIN, and SUMAVG Calcula la media del valor de un campo sobre el grupo. El tipo del campo debe ser numérico y el resultado será un Double
COUNT sirve para contar cuantos elementos hay sobre el grupo. Puede añadirse la palabra reservada DISTINCT para que elimine los valores duplicados antes de contar
SELECT e, COUNT(p), COUNT(DISTINCT p.type)
FROM Employee e JOIN e.phones p
GROUP BY e
MAX Calcula el valor máximo de un campo sobre el grupoMIN Calcula el valor mínimo de un campo sobre el grupo
SUM Calcula la suma de valores de un campo sobre el grupo

CLÁUSULA GROUP BY

Define la expresión de agrupación sobre la cual los resultados serán agregados.Debe ser una expresión de valor único como un campo o una entidad
SELECT d.name, COUNT(e)
FROM Department d JOIN d.employees e
GROUP BY d.name

Se pueden aplicar varias agregaciones en la misma consulta
SELECT d.name, COUNT(e), AVG(e.salary)
FROM Department d JOIN d.employees e
GROUP BY d.name

CLÁUSULA HAVING


Define un filtro que será aplicado después de que los resultados de la consulta han sido agrupados.  Se puede considerar como una segunda cláusula de filtro que permite a su vez el uso de funciones agregadas
SELECT e, COUNT(p)
FROM Employee e JOIN e.projects p
GROUP BY e
HAVING COUNT(p) >= 2

El ejemplo recupera todos los empleados asignados a 2 o más proyectos

SENTENCIAS UPDATE

Son equivalentes a los SQL Update y las usaremos para actualizar las propiedades de nuestras entidades.La cláusula WHERE es equivalente a la de las consultas SELECTSe pueden actualizar varias propiedades en una única sentenciaSu estructura es la siguiente:
UPDATE entity_name [[AS] identification_variable]
SET update_statement {, update_statement}*
[WHERE conditional_expression]
UPDATE Phone p
SET p.number = CONCAT('288', SUBSTRING(p.number, LOCATE(p.number, '-'), 4)),
p.type = 'Business'
WHERE p.employee.address.city = 'Ottawa' AND
p.type = 'Office'

La anterior sentencia modifica los números de teléfono y tipo de los empleados de la ciudad de Otawa

SENTENCIAS DELETE

Son equivalentes a los SQL DELETE y las usaremos para eliminar entidades. Su estructura es la siguiente:
DELETE FROM entity_name [[AS] identification_variable]
[WHERE condition]
DELETE FROM Employee e
WHERE e.department IS NULL

La cláusula WHERE es equivalente a la de las consultas SELECT. Sino se especifica todas las entidades del tipo indicado serán eliminadas

Continua aprendiendo…

En el siguiente artículo aprenderás sobre el API Criteria de JPA que nos permitirá construir sentencias de un modo más sencillo y mantenible gracias a las características propias del lenguaje Java