Catálogo de Cursos
Todos los cursos
Matricúlate


Volver
Título del curso: Mapeo objeto-relacional mediante Hibernate
Sección: FGUPM-CETTICO
Área de Conocimiento: TECNOLOGÍA JAVA
Id. Curso: 29
Duración (número de semanas): 5 semanas + 2 semanas (consultas y trabajos)
Fecha propuesta: Inscríbete. Formamos grupos permanentemente.
Precio:
620,00 €
¿A quién va dirigido?: -
Requisitos previos:
-
¿Para que te prepara?:

El objetivo general de este curso es la introducción del alumno al mundo del mapeo objeto-relacional y el aprendizaje del framework Hibernate para sacar el máximo partido a este paradigma.

Se estudiará cómo representar el modelo de datos y resto de configuraciones necesarias para el uso de Hibernate. Se tratará la estructura de los ficheros de configuración, ubicando las distintas configuraciones en su lugar correspondiente del esquema de una aplicación Hibernate.

El alumno deberá ser capaz de realizar tanto asociaciones simples como complicadas entre clases Java y el modelo relacional de la base de datos. El estudio comprenderá tanto le modelado utilizando ficheros de configuración XML como mediante anotaciones. Se explicará que es una anotación, que ventajas y desventajas se desprenden de su uso.

Gracias a estos nuevos conocimientos, el alumno será capaz de modelar y configurar la JPA para hacer uso de Hibernate como su proveedor de la JPA. Esto a su vez permitirá el uso de Hibernate en entornos EJB 3.0.

Una de las bases del éxito de Hibernate es que permite utilizar objetos simples (POJOs) con un ciclo de vida igualmente simple pero potente. Antes de considerar los estados del ciclo de vida se introducirán conceptos como la unidad de trabajo y el contexto de persistencia. Al final, el alumno será capaz de sacar partido de las dos APIs que Hibernate ofrece para controlar el ciclo de vida de los objetos.

Temario:

1. Definición del modelo
1.1. Introducción
Hibernate proporciona un mecanismo para realizar mapeos objeto-relacional, facilitando la adaptación de los datos usados en una aplicación para su almacenamiento en una base de datos relacional. Este salto conceptual sólo puede realizarse apoyándose en meta información acerca de las clases y tablas implicadas. Precisamente a esa información se la denomina el modelo de los datos.

Hibernate Core, es el núcleo disponible para todas las versiones y entornos de Java en los que Hibernate está disponible: Java 4, 5 y 6, versiones estándar y empresarial. Hibernate Core obtiene la información del modelo a partir de ficheros de configuración XML.

Existe otra forma de especificar esta información mediante anotaciones en el propio código, sin embargo no está disponible para Java 4. Esto es debido a que las anotaciones fueron introducidas en Java en la versión 5 como parte de la evolución del lenguaje junto con otras mejoras en la API.

1.2. Objetivos
En este capítulo el alumno aprenderá a definir el modelo de datos así como a configurar Hibernate de la forma tradicional. En primer lugar se tratará la estructura de los ficheros de configuración, ubicando en las distintas configuraciones en su lugar correspondiente del esquema. Esto implica un conocimiento profundo acerca del fichero de configuración principal y de los ficheros de asociación de cada clase. Además, es importante tener en cuenta las distintas prioridades que tienen las configuraciones dependiendo de la forma en la que se especifiquen.

Por último, el alumno deberá ser capaz de realizar asociaciones sencillas entre clases Java y el modelo relacional de la base de datos.

2. Asociaciones avanzadas
2.1. Introducción
Las asociaciones estudiadas hasta el momento han consistido en mapeos sencillos que implicaban a una sola tabla y la correspondiente clase de entidad. No obstante, una gran parte del valor añadido de Hibernate se encuentra en su capacidad para ocultar las relaciones entre tablas que se dan con las propiedades multivaluadas y con las relaciones entre tablas. A cambio de declarar correctamente estas condiciones en los ficheros de configuración, se puede navegar a través de los objetos relacionados sin ser siquiera conscientes del esquema subyacente.

Para obtener estas ventajas, Hibernate provee dos herramientas en la definición de los ficheros de asociación: las propiedades multivaluadas y las relaciones. Los campos de aplicación de ambos mecanismos se solapan en algunos casos y tienen particularidades que los hacen más indicados para resolver diferentes problemas como se verá a continuación.

2.2. Objetivos
En esta sección se estudiarán las propiedades multivaluadas que permiten asociar colecciones de valores supeditados a una instancia de una clase como puedan ser varios números de teléfono de un contacto en una agenda.

Se aprenderá a utilizar conjuntos, colecciones identificadas, listas, mapas y atributos compuestos como casos particulares de estas propiedades multivaluadas. Se explicarán también aspectos más específicos cómo habilitar la navegación bidireccional y la ordenación personalizada de los valores.

El segundo grupo de conceptos gira alrededor de las relaciones. Se explicarán los distintos tipos de relaciones (1:1, 1:N, M:N) y cómo modelarlas.

3. Anotaciones
3.1. Introducción
La tecnología EJB ha marcado un gran hito, sobre todo a partir de la versión 3.0 de esta especificación, abriendo nuevas posibilidades para Hibernate. Estas nuevas posibilidades vienen a través de la Java Persistence API, parte de la especificación de EJBs 3.0 que define una API orientada al modelo objeto-relacional. La tecnología EJB 3.0 define la JPA, sin embargo, existen diferentes productos que implementan esta API, siendo Hibernate uno de ellos.

Hibernate, como hemos visto, se puede usar de diversas maneras, no siendo obligatorio usar Hibernate como proveedor de la JPA. En este sentido, es posible usar Hibernate de forma normal, sin ser utilizado como proveedor de la JPA, pero usando anotaciones. Eso sí, el juego de anotaciones disponibles es el mismo que el que se puede utilizar cuando se usa Hibernate como proveedor de la JPA.

Este tema se va a centrar en explicar la parte de la JPA que permite crear el modelo de datos mediante anotaciones, y como adaptar la configuración de Hibernate para hacer uso de estas sin llegar al punto de usar Hibernate como proveedor de la JPA.

3.2. Objetivos
Antes de nada, se explicará que es una anotación, que ventajas y desventajas conlleva usar las anotaciones en lugar de ficheros “hbm.xml”, así como un breve tutorial / recordatorio de cómo usar y definir anotaciones nativas de Java 5.0.

Posteriormente, el alumno deberá ser capaz de realizar asociaciones entre clases Java y el modelo relacional de la base de datos usando anotaciones tal y como se ha visto en secciones anteriores utilizando ficheros “hbm.xml”.

Por último se indicará como actualizar la configuración de Hibernate para que utilice las entidades creadas mediante las anotaciones. En capítulos posteriores se explicará como usar la configuración de la JPA en vez de la configuración de Hibernate.

4. Hibernate como implementación de JPA
4.1. Introducción
Hasta ahora habíamos usado Hibernate con las anotaciones de la JPA, dado que Hibernate proporciona su funcionalidad de anotaciones a través de ellas, sin embargo, la configuración y el uso lo hemos llevado a cabo a través de Hibernate.

El primer paso que tendremos que dar es adaptar la configuración para que use los ficheros de configuración de la JPA. Este fichero de configuración no se podrá leer mediante los mecanismos de Hibernate, por lo que también habrá que adaptarlos.

Al final del todo el proceso de configuración obtendremos una instancia de que implemente la interfaz EntityManagerFactory y que como veremos en el próximo capítulo, nos servirá para manejar las entidades que hemos modelado.

4.2. Objetivos
En primer lugar se tratará la estructura de los ficheros de configuración globales de la JPA, que nos permitirá controlar la configuración de lo que llamaremos una unidad de persistencia. Este fichero será leído y transformado en un objeto EntityManagerFactory.

Por último, el alumno aprenderá la estructura del fichero de asociaciones de la JPA, con el que se podrá tanto crear como modificar las asociaciones de los objetos persistentes (entidades, componentes y entidades abstractas).

Gracias a estos nuevos conocimientos, el alumno será capaz de modelar y configurar la JPA para hacer uso de Hibernate como su proveedor de la JPA. Esto a su vez permitirá el uso de Hibernate en entornos EJB 3.0.

5. Ciclo de vida
5.1. Introducción
En capítulos anteriores hemos visto como crear modelos de datos haciendo uso de Hibernate y de las distintas posibilidades que nos brinda: con ficheros XML de Hibernate y mediante las anotaciones de la JPA.

En ciertos casos, puede que esto sea todo lo que necesitemos, dado que por ejemplo, si usamos Hibernate como motor de persistencia de los EJBs, nosotros no tendremos que encargarnos del ciclo de vida de la persistencia de las entidades, o al menos no directamente con Hibernate.

Sin embargo, es interesante conocer el manejo del ciclo de vida con Hibernate, para los casos en los que si sea necesario, esto es, cuando no usemos EJBs u otro Framework superior a Hibernate, o cuando simplemente, aunque los usemos, necesitemos hacer algo que no nos da el Framework.

5.2. Objetivos
En este capítulo vamos a hacer una breve introducción a los términos implicados en el ciclo de vida relativo a la persistencia, así como a explicar este. Estos términos serán usados a lo largo del capítulo para explicar el manejo del ciclo de vida de las entidades creadas con Hibernate.

Además, como hemos visto con la definición de los modelos, vamos a contar con dos APIs, la API inicial de Hibernate: Hibernate Core; y la de la JPA. Estas API son muy parecidas, aunque difieren en ciertos aspectos, por lo que se van a contar las dos de forma separada.

Además de la API necesaria para el manejo directo del ciclo de vida, se va a enseñar brevemente como interactuar con este ciclo de vida mediante sentencias HQL/JPAQL y sentencias SQL.

Descripción:

Hibernate es un framework cuyo objetivo es dar una solución al problema de la diferencia entre los dos modelos de datos coexistentes en toda aplicación: el modelo usado para almacenar los datos en memoria mientras este esta se está ejecutando y el modelo usado para almacenar estos datos.

Tradicionalmente estas diferencias se solucionaban siendo la aplicación la encargada de proporcionar los mecanismos de adaptación necesarios entre estos dos modelos. Sin embargo, con el tiempo, han ido surgiendo distintos paradigmas y frameworks cuyo objetivo es facilitar y simplificar esta tarea. Entre los paradigmas surgidos destaca el “Mapeo objeto-relacional” (más conocido por su nombre en inglés, Object-Relational mapping), que permite convertir los datos usados en un lenguaje de programación orientado a objetos con el fin de usarlos en una base de datos relacional.

Este salto conceptual sólo puede realizarse apoyándose en meta información acerca de las clases y tablas implicadas. Hibernate ofrece su funcionalidad a través de dos interfaces de programación distintas. La interfaz nativa disponible para todas las versiones de Java se denomina Hibernate Core y se basa en ficheros XML para representar los metadatos. La otra interfaz de programación permite especificar esta información mediante anotaciones en el propio código, lo que no está disponible para Java 4.

Hibernate implementa la Java Persistence API, parte de la especificación de EJBs 3.0 y que posibilita el uso de Hibernate en el seno de esta tecnología. La JPA es un estándar de gran repercusión y que será tratado con especial atención.

Java Persistence API (JPA)

Después del éxito cosechado por la versión 2.1 de los EJBs, Sun lanzó en 2003 una petición para realizar una nueva especificación de los EJBs con la intención de simplificarlos. De está forma nació la versión 3.0 de los EJBs, con la participación de distintas entidades, entre las que estaba el equipo de trabajo de Hibernate.

Está nueva especificación se dividió en dos partes: la primera define el nuevo modelo de programación para los EJBs de sesión y de los EJBs dirigidos por mensajes, las reglas de despliegue, etcétera, mientras que la segunda parte se encarga exclusivamente de la persistencia (entidades, meta-información sobre las asociaciones objeto/relación, interfaces de manejo de la persistencia y del lenguaje para las consultas). Esta última parte es lo que se llama la Java Persistence API.

Esta separación se realizó de forma que se permitiera la implementación de software que siguiese esta especificación, pero sin obligarla a tener que seguir la especificación de forma completa (se puede implementar simplemente una de las dos partes en la que está dividida). Esto posibilita la creación de software que, por ejemplo, implemente sólo la Java Persistence API, pero sin la necesidad de que implemente el resto de la especificación, o la implementación completa de los EJBs 3.0 mediante la combinación de los componentes (un contenedor de EJBs 3.0 y un motor JPA).

Hibernate surgió antes que se llevara a cabo la definición de los EJBs 3.0, por lo que tiene su propia API que permite que sea usado sin tener que seguir la JPA. Sin embargo, uno de los objetivos de Hibernate es servir de implementación de la JPA, siendo posible su uso en un entorno EJB 3.0.

Hasta ahora se ha estado haciendo uso de los ficheros XML de Hibernate para definir el modelo de datos. Esta forma de crear el modelo de datos es totalmente válida y funcional. Sin embargo, la tecnología EJB ha marcado un gran hito, sobre todo a partir de la versión 3.0 de esta especificación, abriendo nuevas posibilidades para Hibernate.

Matricúlate


Volver