Vous êtes sur la page 1sur 53

Consultas en JPA-QL

Sistemas de Persistencia de Objetos

Contenidos

ene-09

Alberto MFA alb@uniovi.es

Preparacin y ejecucin

ene-09

Alberto MFA alb@uniovi.es

Creacin
HQL y JPA QL

QBC y QBE

(Query By Criteria)

SQL Directo
ene-09 Alberto MFA alb@uniovi.es 4

Paginacin

El primer resultado es el 0

Nmero mximo de filas a recuperar desde la fijada por setFirstResult() Ejecuta la consulta y devuelve una List() de objetos User

Las Query permiten encadenamiento de mtodos

ene-09

Alberto MFA alb@uniovi.es

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


ene-09 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)

ene-09

Alberto MFA alb@uniovi.es

Enlace de parmetros
Enlace posicional
El orden de parmetros no tiene por qu ser secuencial

Ojo! Se empieza en 1 setters sobrecargados


ene-09 Alberto MFA alb@uniovi.es 8

Ajustes de rendimiento

ene-09

Alberto MFA alb@uniovi.es

Ajustes de rendimiento

Los hints son todos dependientes de implementacin, no estndar JPA Si un hint no es soportado es ignorado silenciosamente
ene-09 Alberto MFA alb@uniovi.es 10

Hints: ejemplos

ene-09

Alberto MFA alb@uniovi.es

11

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

As ya no pero puede no haber ninguno

ene-09

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

ene-09

Alberto MFA alb@uniovi.es

13

ene-09

Alberto MFA alb@uniovi.es

14

Consultas bsicas

ene-09

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
ene-09 Alberto MFA alb@uniovi.es 16

Partes de una consulta


FROM WHERE SELECT

Tabla Criterios de seleccin de filas

Resultados Puede que haya 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


ene-09 Alberto MFA alb@uniovi.es

Tambin polimorfismo sobre 18 interfaces

Restriccin (WHERE)
WHERE para filtrar filas

ene-09

Alberto MFA alb@uniovi.es

19

Restriccin (WHERE)

ene-09

Alberto MFA alb@uniovi.es

20

Operadores de comparacin y precedencia


_

+
ene-09 Alberto MFA alb@uniovi.es 21

Restricciones sobre colecciones (WHERE)


En el WHERE Se pueden complementar con funciones

ene-09

Alberto MFA alb@uniovi.es

22

JPA

Funciones
Hibernate

ene-09

Alberto MFA alb@uniovi.es

23

Ordenacin
De la forma usual

ene-09

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)

ene-09

Alberto MFA alb@uniovi.es

25

Proyeccin de escalares

En la select pueden ir atributos de clases y resultados de funciones (las ya vistas)

ene-09

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 ene-09 Bids

Alberto MFA alb@uniovi.es

28

Joins implcitos en asociaciones


Cuando se accede a propiedades a lo largo de un camino (path)

Bid join Item

Item join User

Acceso a propiedad

Tambin se puede usar en select


ene-09 Alberto MFA alb@uniovi.es 29

Joins implcitos
Solo se permiten en caminos (path) que pasen a travs de asociaciones manyto-one o one-to-one
El final del camino NO puede ser multivaluado P.e. item.bids.amount es ilegal

Solo en SELECT y WHERE


ene-09 Alberto MFA alb@uniovi.es 30

Joins implcitos traducidos a SQL

ene-09

Alberto MFA alb@uniovi.es

31

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

many-to-many one-to-many

ene-09

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

ene-09

Alberto MFA alb@uniovi.es

33

Join explcito traducdo a SQL

ene-09

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
ene-09 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.


ene-09 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 asociaciones -to-one; esto es til si hay mapeo fetch=LAZY y se quiere forzar eager para una consulta
Alberto MFA alb@uniovi.es 37

Si no pone left tambin carga de forma agresiva item y bidder pero solo los bids que tienen item y bidder ene-09

Fetch join: recovecos


No se puede usar un alias en SELECT ni WHERE No se debe 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
ene-09 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

ene-09

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

ene-09

Alberto MFA alb@uniovi.es

40

Comparacin de identificadores
equivalentes

Diferencia: la primera no carga Item, la segunda s


ene-09 Alberto MFA alb@uniovi.es 41

Comparacin de id en ejecucin

ene-09

Alberto MFA alb@uniovi.es

42

Consultas de agregados

ene-09

Alberto MFA alb@uniovi.es

43

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

ene-09

Alberto MFA alb@uniovi.es

44

Consulta de totales
GROUP BY

+
Tabla
Criterios de seleccin de filas

Formacin de grupos

Funciones de agregados

Clculos sobre los grupos

Tabla Grupos resultado Seleccin de grupos 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

ene-09

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

ene-09

Alberto MFA alb@uniovi.es

47

Instanciacin dinmica en SELECT

Las consultas que no devuelven entidades pueden tener ms rendimiento al no meter resultados en contexto de persistencia
ene-09

Cada fila devuelve un objeto de la clase que se especifica La clase debe existir y no necesita estar mapeada
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

ene-09

Alberto MFA alb@uniovi.es

49

Subselects
Correlada: puede tener peor rendimiento

No correlada: no tiene impacto de rendimiento Siempre entre parntesis


ene-09 Alberto MFA alb@uniovi.es 50

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

ene-09

Alberto MFA alb@uniovi.es

51

Cuantificacin ejemplos

ene-09

Alberto MFA alb@uniovi.es

52

Funciones con subselect implcitas

ene-09

Alberto MFA alb@uniovi.es

53

Vous aimerez peut-être aussi