unidades:05_hibernate_query_language:04_colecciones
no way to compare when less than two revisions
Diferencias
Muestra las diferencias entre dos versiones de la página.
| — | unidades:05_hibernate_query_language:04_colecciones [2023/04/07 21:26] (actual) – creado - editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== Objetos y colecciones ====== | ||
| + | En este tema volvemos | ||
| + | Hasta ahora el HQL es un lenguaje de consultas muy similar a SQL sólo que usando como modelo de datos subyacente clases Java en vez de Tablas SQL. Sin embargo, | ||
| + | |||
| + | ===== Modelo ===== | ||
| + | En los ejemplos que vamos a realizar van a usarse las siguientes clases Java y tablas, que sólo mostraremos en formato UML. No vamos a poner el código fuente ni los ficheros de hibernate de mapeo ya que no todas la características que usan han sido explicadas en lecciones anteriores. | ||
| + | |||
| + | ==== Modelo de Java ==== | ||
| + | El modelo de clases Java es el siguiente: | ||
| + | |||
| + | <uml> | ||
| + | class Profesor | ||
| + | Profesor : int id | ||
| + | |||
| + | class Nombre | ||
| + | Nombre : String nombre | ||
| + | Nombre : String ape1 | ||
| + | Nombre : String ape2 | ||
| + | |||
| + | class Direccion | ||
| + | Direccion : int id | ||
| + | Direccion : String calle | ||
| + | Direccion : int numero | ||
| + | Direccion : String provincia | ||
| + | |||
| + | class Municipio | ||
| + | Municipio : int idMunicipio | ||
| + | Municipio : String codProvincia | ||
| + | Municipio : String codMunicipio | ||
| + | Municipio : String nombre | ||
| + | |||
| + | class CorreoElectronico | ||
| + | CorreoElectronico: | ||
| + | CorreoElectronico: | ||
| + | |||
| + | |||
| + | Profesor " | ||
| + | Profesor " | ||
| + | Profesor " | ||
| + | Direccion " | ||
| + | </ | ||
| + | ==== Modelo de Tablas ==== | ||
| + | El modelo de tablas es el siguiente: | ||
| + | |||
| + | <uml> | ||
| + | class Profesor << | ||
| + | Profesor : INTEGER id | ||
| + | Profesor : VARCHAR nombre | ||
| + | Profesor : VARCHAR ape1 | ||
| + | Profesor : VARCHAR ape2 | ||
| + | |||
| + | |||
| + | class CorreoElectronico << | ||
| + | CorreoElectronico: | ||
| + | CorreoElectronico: | ||
| + | CorreoElectronico: | ||
| + | |||
| + | class Direccion << | ||
| + | Direccion : INTEGER id | ||
| + | Direccion : VARCHAR calle | ||
| + | Direccion : INTEGER numero | ||
| + | Direccion : VARCHAR IdMunicipio | ||
| + | Direccion : VARCHAR provincia | ||
| + | |||
| + | class Municipio << | ||
| + | Municipio : INTEGER idMunicipio | ||
| + | Municipio : VARCHAR codProvincia | ||
| + | Municipio : VARCHAR codMunicipio | ||
| + | Municipio : VARCHAR nombre | ||
| + | |||
| + | Profesor " | ||
| + | Profesor " | ||
| + | Direccion " | ||
| + | </ | ||
| + | |||
| + | ===== ===== | ||
| + | |||
| + | |||
| + | Las características especificas de HQL por usar como modelo clases Java son: | ||
| + | * [[# | ||
| + | * [[# | ||
| + | |||
| + | ==== Navegación por propiedades ==== | ||
| + | Una característica de HQL es la posibilidad de navegar por las propiedades. | ||
| + | |||
| + | En HQL si referenciamos una propiedad de un clase Java , esta propiedad puede no ser un valor escalar sino una referencia a otro objeto Java, que a su vez tiene más propiedades, | ||
| + | |||
| + | Por ejemplo: | ||
| + | <code sql> | ||
| + | SELECT p.nombre.ape1 FROM Profesor p | ||
| + | </ | ||
| + | |||
| + | Aquí vemos cómo desde objeto '' | ||
| + | |||
| + | Los mismo se puede hacer con el nombre del municipio. | ||
| + | <code sql|Mostrar el Id y el municipio de cada profesor> | ||
| + | SELECT p.nombre.ape1, | ||
| + | </ | ||
| + | Desde la clase '' | ||
| + | |||
| + | Realmente esta característica es la misma que hacemos desde Java usando los métodos '' | ||
| + | |||
| + | <code java> | ||
| + | Profesor profesor=......; | ||
| + | | ||
| + | String nombreMunicipio=profesor.getDireccion().getMunicipio().getNombre(); | ||
| + | </ | ||
| + | |||
| + | Así que no debe extrañarnos que podamos realizarlo desde HQL. | ||
| + | |||
| + | <note tip> | ||
| + | Si comprobamos la SQL que lanza Hibernate , podemos comprobar que lanza una SELECT en la que realiza todos los '' | ||
| + | |||
| + | Así que esta característica de Hibernate es muy útil y potente. | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | profesor0_.ape1 AS col_0_0_, | ||
| + | municipio2_.NombreMunicipio AS col_1_0_ | ||
| + | FROM | ||
| + | Profesor profesor0_, | ||
| + | Direccion direccion1_, | ||
| + | Municipios municipio2_ | ||
| + | WHERE | ||
| + | profesor0_.Id=direccion1_.Id AND | ||
| + | direccion1_.idMunicipio=municipio2_.idMunicipio | ||
| + | </ | ||
| + | </ | ||
| + | ==== Colecciones ==== | ||
| + | Otra característica de HQL es la posibilidad de tratar con colecciones dentro de la propia consulta. Veamos las funciones que tratan con colecciones. | ||
| + | |||
| + | | ||
| + | |||
| + | * '' | ||
| + | SELECT p.nombre.ape1, | ||
| + | </ | ||
| + | * '' | ||
| + | SELECT p.nombre FROM Profesor p WHERE p.correosElectronicos IS EMPTY | ||
| + | </ | ||
| + | * '' | ||
| + | SELECT p.nombre FROM Profesor p WHERE p.correosElectronicos IS NOT EMPTY | ||
| + | </ | ||
| + | * '' | ||
| + | * '' | ||
unidades/05_hibernate_query_language/04_colecciones.txt · Última modificación: 2023/04/07 21:26 por 127.0.0.1