0% encontró este documento útil (0 votos)
78 vistas53 páginas

Consultas Efectivas en JPA-QL

El documento describe las consultas en JPA-QL, incluyendo preparación y ejecución, creación, paginación, enlace de parámetros, ajustes de rendimiento, ejecución, consultas con nombre, consultas básicas, partes de una consulta, selección, restricción, proyección, consultas sobre varias tablas, joins, ordenación, funciones, consultas de agregados e instanciación dinámica.

Cargado por

ginomania
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
78 vistas53 páginas

Consultas Efectivas en JPA-QL

El documento describe las consultas en JPA-QL, incluyendo preparación y ejecución, creación, paginación, enlace de parámetros, ajustes de rendimiento, ejecución, consultas con nombre, consultas básicas, partes de una consulta, selección, restricción, proyección, consultas sobre varias tablas, joins, ordenación, funciones, consultas de agregados e instanciación dinámica.

Cargado por

ginomania
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Consultas en JPA-QL

Sistemas de Persistencia de Objetos

Contenidos

ene-09

Alberto MFA [email protected]

Preparacin y ejecucin

ene-09

Alberto MFA [email protected]

Creacin
HQL y JPA QL

QBC y QBE

(Query By Criteria)

SQL Directo
ene-09 Alberto MFA [email protected] 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 [email protected]

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 [email protected] 6

Enlace de parmetros
Enlace nominal (recomendado)

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

ene-09

Alberto MFA [email protected]

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 [email protected] 8

Ajustes de rendimiento

ene-09

Alberto MFA [email protected]

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 [email protected] 10

Hints: ejemplos

ene-09

Alberto MFA [email protected]

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 [email protected]

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 [email protected]

13

ene-09

Alberto MFA [email protected]

14

Consultas bsicas

ene-09

Alberto MFA [email protected]

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 [email protected] 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 [email protected]

Tambin polimorfismo sobre 18 interfaces

Restriccin (WHERE)
WHERE para filtrar filas

ene-09

Alberto MFA [email protected]

19

Restriccin (WHERE)

ene-09

Alberto MFA [email protected]

20

Operadores de comparacin y precedencia


_

+
ene-09 Alberto MFA [email protected] 21

Restricciones sobre colecciones (WHERE)


En el WHERE Se pueden complementar con funciones

ene-09

Alberto MFA [email protected]

22

JPA

Funciones
Hibernate

ene-09

Alberto MFA [email protected]

23

Ordenacin
De la forma usual

ene-09

Alberto MFA [email protected]

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 [email protected]

25

Proyeccin de escalares

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

ene-09

Alberto MFA [email protected]

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 [email protected]

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 [email protected] 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 [email protected] 30

Joins implcitos traducidos a SQL

ene-09

Alberto MFA [email protected]

31

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

many-to-many one-to-many

ene-09

Alberto MFA [email protected]

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 [email protected]

33

Join explcito traducdo a SQL

ene-09

Alberto MFA [email protected]

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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 38

Fetch join recovecos

Se pueden cargar duplicados, para evitarlos No se puede usar un alias en SELECT ni WHERE

ene-09

Alberto MFA [email protected]

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 [email protected]

40

Comparacin de identificadores
equivalentes

Diferencia: la primera no carga Item, la segunda s


ene-09 Alberto MFA [email protected] 41

Comparacin de id en ejecucin

ene-09

Alberto MFA [email protected]

42

Consultas de agregados

ene-09

Alberto MFA [email protected]

43

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

ene-09

Alberto MFA [email protected]

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 [email protected]

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 [email protected]

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 [email protected] 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 [email protected]

49

Subselects
Correlada: puede tener peor rendimiento

No correlada: no tiene impacto de rendimiento Siempre entre parntesis


ene-09 Alberto MFA [email protected] 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 [email protected]

51

Cuantificacin ejemplos

ene-09

Alberto MFA [email protected]

52

Funciones con subselect implcitas

ene-09

Alberto MFA [email protected]

53

También podría gustarte