Está en la página 1de 53

Consultas en JPA-QL

Sistemas de Persistencia de
Objetos
Contenidos

nov-08 Alberto MFA alb@uniovi.es 2


Preparacin y ejecucin

nov-08 Alberto MFA alb@uniovi.es 3


Creacin
 HQL y JPA QL

 QBC y QBE (Query By Criteria)

 SQL Directo

nov-08 Alberto MFA alb@uniovi.es 4


Paginacin

Nmero mximo de filas a


El primer resultado es el 0 recuperar desde la fijada por
setFirstResult()

Ejecuta la consulta y
Las Query permiten devuelve una List()
encadenamiento de de objetos User
mtodos

nov-08 Alberto MFA alb@uniovi.es 5


Enlace de parmetros
 Lo que no se debe hacer

Qu hay en este
string?

Qu pasa si
escriben esto en
un formulario?

Es el problema de la SQL injection

nov-08 Alberto MFA alb@uniovi.es 6


Enlace de parmetros
 Enlace nominal (recomendado)

setParameter() sobrecargado para


java.util.Date, java.util.Calendar y
Object (ver documentacin)

nov-08 Alberto MFA alb@uniovi.es 7


Enlace de parmetros
 Enlace posicional

El orden de parmetros
no tiene por qu ser
secuencial

Ojo! Se empieza en 1
setters
sobrecargados

nov-08 Alberto MFA alb@uniovi.es 8


Ajustes de rendimiento

nov-08 Alberto MFA alb@uniovi.es 9


Ajustes de rendimiento

 Los hints son todos dependientes de


implementacin, no estndar JPA
 Si un hint no es soportado es ignorado
silenciosamente
nov-08 Alberto MFA alb@uniovi.es 10
Hints: ejemplos

nov-08 Alberto MFA alb@uniovi.es 11


Ejecucin
 Se produce al invocar a:
 getResultList()
Excepcin si ms
 getSingleResult() de uno o ninguno

As ya no pero puede
no haber ninguno

nov-08 Alberto MFA alb@uniovi.es 12


Consultas con nombre
 Se carga el string de la consulta desde
mapeos
 createNamedQuery()

 Query con anotaciones o en orm.xml

nov-08 Alberto MFA alb@uniovi.es 13


nov-08 Alberto MFA alb@uniovi.es 14
Consultas bsicas

nov-08 Alberto MFA alb@uniovi.es 15


Partes de una consulta
 Seleccin
 Fuente de datos  FROM
 Una sola o combinacin de ellas
 Restriccin
 Filtrado de filas  WHERE
 Proyeccin
 Seleccin de partes de las filas que pasan
el filtro  SELECT
nov-08 Alberto MFA alb@uniovi.es 16
Partes de una consulta
FROM WHERE SELECT

Resultados
Tabla
Criterios de Puede que haya
seleccin de filas menos filas
(WHERE) y puede
que menos campos
(SELECT)
Curso 2005-2006 SID2-GAP 17
Seleccin (FROM)
 SELECT en JPA QL, no necesario en HQL
 select i from Item i
 Alias necesarios para condiciones sobre
miembros
 select i from Item as i
 select i from Item i
 Las consultas son polimrficas Sube toda la BDD!
 select b from BillingDetail b
 select o from java.lang.Object o
 select s from java.io.Serializable s
Tambin
polimorfismo sobre
nov-08 Alberto MFA alb@uniovi.es 18
interfaces
Restriccin (WHERE)
 WHERE para filtrar filas

nov-08 Alberto MFA alb@uniovi.es 19


Restriccin (WHERE)

nov-08 Alberto MFA alb@uniovi.es 20


Operadores de comparacin y
precedencia

+
nov-08 Alberto MFA alb@uniovi.es 21
Restricciones sobre
colecciones (WHERE)
 En el WHERE
 Se pueden complementar con funciones

nov-08 Alberto MFA alb@uniovi.es 22


JPA

Funciones

Hibernate

nov-08 Alberto MFA alb@uniovi.es 23


Ordenacin
 De la forma usual

nov-08 Alberto MFA alb@uniovi.es 24


Proyeccin

(Esta consulta es intil ya


que da un producto
cartesiano)

Cada fila es un vector de los


elementos proyectados (Item y Bid)

nov-08 Alberto MFA alb@uniovi.es 25


Proyeccin de escalares

En la select pueden ir
atributos de clases

y resultados de funciones
(las ya vistas)

nov-08 Alberto MFA alb@uniovi.es 26


Consulta sobre varias tablas

Tabla +
Criterios de filtrado
de filas Resultados

Combinacin de registros de las


dos tablas
Tabla
Curso 2005-2006 SID2-GAP 27
Joins: inner, left y right outer

Todos los Items


con sus Bids

Los Items que


tienen Bids
nov-08 Alberto MFA alb@uniovi.es 28
Joins implcitos en
asociaciones
 Cuando se accede a propiedades a lo
largo de un camino (path)

Item join User Acceso a propiedad


Bid join Item

Tambin se puede usar en select


nov-08 Alberto MFA alb@uniovi.es 29
Joins implcitos
 Solo se permiten en caminos (path) que
pasen a travs de asociaciones many-
to-one o one-to-one
 El final del camino NO puede ser
multivaluado
 P.e. item.bids.amount es ilegal

nov-08 Alberto MFA alb@uniovi.es 30


Joins implcitos en SQL

nov-08 Alberto MFA alb@uniovi.es 31


Joins en FROM
 Cuando el camino de asociaciones
resulta en un conjunto

many-to-many

one-to-many

nov-08 Alberto MFA alb@uniovi.es 32


Joins en FROM
 Tambin left y right join

Los Item %name% y sus


Bids aunque haya Item
que no tienen Bids

nov-08 Alberto MFA alb@uniovi.es 33


Join explcito en SQL

nov-08 Alberto MFA alb@uniovi.es 34


Fetch join en FROM
 Salvo mapeo en contra todas las colecciones
se cargan lazy
 La configuracin de mapeo se puede
sobrecargar para una consulta concreta si se
usa fetch join para colecciones
 El efecto es que se cargan todos los
elementos de la coleccin asociada al
momento (eager fetching)
 Es un ajuste fundamental en el rendimiento
de algunas consultas

nov-08 Alberto MFA alb@uniovi.es 35


Fetch join en FROM

Se cargan los Item que


pasan la restriccin y sus
colecciones asociadas de
Bids de forma agresiva
(eager), no lazy

El resultado es una List() de


Item. Ya no son pares.

nov-08 Alberto MFA alb@uniovi.es 36


Fetch join en FROM
 Tambin se puede usar para cargar de
forma agresiva el extremo one de
asociaciones one-to-one y many-to-one

many-to-one

Nota: JPA por defecto carga eager


Si no pone left tambin carga asociaciones -to-one, es til si
de forma agresiva item y hay mapeo fetch=LAZY y se quiere
bidder pero solo los bids que forzar
tienen item y bidder
nov-08 Alberto MFA alb@uniovi.es 37
Fetch join: recovecos
 No se puede usar un alias en SELECT ni
WHERE
 No se puede hacer fetch join ms de una
coleccin (problema del producto cartesiano)
 La estrategia del mapeo se ignora
 Se pueden cargar duplicados
 setMaxResults() y
setFirstResult() se desaconsejan

nov-08 Alberto MFA alb@uniovi.es 38


Fetch join recovecos


 Se pueden cargar
duplicados, para evitarlos

No se puede usar
un alias en SELECT
ni WHERE

nov-08 Alberto MFA alb@uniovi.es 39


Theta-style en WHERE
 El ajuste del join se hace en el WHERE
 Es prctico para consultas sobre clases
no asociadas

Da pares

nov-08 Alberto MFA alb@uniovi.es 40


Comparacin de
identificadores

equivalentes

Diferencia: la primera no carga Item,


la segunda s

nov-08 Alberto MFA alb@uniovi.es 41


Comparacin de id en
ejecucin

nov-08 Alberto MFA alb@uniovi.es 42


Consultas de agregados

nov-08 Alberto MFA alb@uniovi.es 43


Funciones en SELECT
count() min() max() sum() avg()

nov-08 Alberto MFA alb@uniovi.es 44


Consulta de totales
GROUP BY

Formacin de
+ grupos

Tabla
Criterios de
seleccin de filas
Funciones de Clculos sobre
agregados los grupos

Tabla

Seleccin de
grupos
Resultados
HAVING
Curso 2005-2006 SID2-GAP 45
Agrupamiento
 Clusula GROUP BY (como en SQL)

Como en SQL cualquier


propiedad o alias que
aparezca en SELECT
fuera de una funcin de
agregado debe aparecer
tambin en la clusula
GROUP BY

nov-08 Alberto MFA alb@uniovi.es 46


Restriccin de grupos con
HAVING
 Mismas reglas que en SQL

Solo puede aparecer en


HAVING una funcin de
agregado o una propiedad (o
alias) usado en GROUP BY

nov-08 Alberto MFA alb@uniovi.es 47


Instanciacin dinmica en
SELECT

 Cada fila devuelve un


Las consultas que no objeto de la clase que se
devuelven entidades
pueden tener rendimiento especifica
al no meter resultados en
contexto de persistencia  La clase debe existir y no
necesita estar mapeada
nov-08 Alberto MFA alb@uniovi.es 48
Subselects
 En SQL una subselect puede ir en
SELECT, FROM o WHERE
 En JPA QL slo puede ir en el WHERE
 Las debe soportar la BDD
 MySQL en versiones anteriores a 4.?? no
tiene subselects

nov-08 Alberto MFA alb@uniovi.es 49


Subselects
Correlada: puede tener peor
rendimiento

No correlada: no tiene
impacto de rendimiento
Siempre entre
parntesis

nov-08 Alberto MFA alb@uniovi.es 50


Cuantificacin
 Una subselect puede devolver una sola
fila (normalmente agregados) o varias
 En el caso de varias se usan con
cuantificacin
 ALL, ANY (o SOME), IN

nov-08 Alberto MFA alb@uniovi.es 51


Cuantificacin ejemplos

nov-08 Alberto MFA alb@uniovi.es 52


Funciones con subselect
implcitas

nov-08 Alberto MFA alb@uniovi.es 53

También podría gustarte