lunes, 23 de marzo de 2009

Día 40: Acceso a Base de Datos. Hibernate

Hibernate
Cuando recojemos algún dato de una base de datos mediante objetos lo que se hará es por ejemplo:
GrupoMusica g = m.getGrupoMusica();
List discos = g.getDiscos();
Hibernate por debajo hará la consulta SQL:
select * from discos where grupo_id = 1;

La carga perezosa, o lazy-loading, consiste en que no se realiza ningún select hasta que invoquemos un método get, de no ser así cada vez que creamos un objeto sin llenarlo el hibernate hará un select cada vez y haría que nuestra aplicación fuera más lenta.
Por suerte nuestra está siempre por defecto a "true"

Nos vamos a la página 159 del PDF "hibernate_reference"

Sobre la problemática de la herencia:
Tenemos una clase padre Usuario y otras 3 clases hijas que heredan de ésta.
Usuario tiene los campos id y nombre.
Registrado tiene además el campo dirección.
Administrador tiene un campo clave y permisos.
Para que todo esto funcione tiene que haber una tabla que tenga todos los campos de todas las clases que usamos además del campo "tipo" que indicará si es registrado o administrador.

Ejercicio
El ejercicio de hoy consiste en crear una estructura de clases usando hibernate y también crear las tablas, aunque nos centraremos simplemente en las clases y sus relaciones.

La estructura de relaciones del ejercicio es la siguiente:
  • Un GrupoMusica tiene muchos Músico y un Músico solo tiene 1 GrupoMusica
  • Un GrupoMusica tiene muchos Disco y un Disco solo tiene 1 GrupoMusica
  • Un Disco tiene muchas Cancion y una Cancion solo tiene 1 Disco
  • Un Disco tiene muchas Productora y una Productora tiene muchos Disco
  • Un Disco tiene muchos Pedido y un Pedido solo tiene 1 Disco
  • Un Pedido solo tiene 1 Cliente y un Cliente tiene muchos Pedido

Los métodos que deben tener, además del id y del nombre (método en plural=Colección de ...):
  • GrupoMusica: +musicos / +discos.
  • Musico: +grupoMusica
  • Disco: +grupoMusica / +productoras / +pedidos / +canciones
  • Productora: +discos
  • Cancion: +disco
  • Pedido: +disco / +cliente
  • Cliente: +pedidos

Los pasos a seguir son:
  • Crear los modelos de cada tabla, es decir, crear cada clase de lo que vayamos a hacer. GrupoMusica, Musico, Disco, Cancion, Productora, Pedido y Cliente.
    Cada una de ellas se tiene que crear en el proyecto modelo "libreria-model" y haremos un paquete nuevo que lo distinga.
  • Crear cada archivo ".hbm.xml" de cada clase indicando los campos que aparecerán en la base de datos y sus relaciones.
  • Actualizar el archivo "hibernate.cfg.xml" para que se apliquen las clases persistentes.
  • Actualizar el archivo "import.sql" para que añada datos de ejemplo.
  • Ejecutar un test para que se verifique que funciona todo.

No hay comentarios:

Publicar un comentario