La relación uno a muchos consiste simplemente en que un objeto padre tenga una lista sin ordenar de otros objetos hijo de forma que al persistirse el objeto principal también se persista la lista de objetos hijo. Esta relación también suele llamarse maestro-detalle o padre-hijo.
Antes de entrar en cómo se implementa en Hibernate , veamos las clases Java y las tablas que definen la relación uno a muchos.
Para nuestro ejemplo vamos a usar las clases:
Profesor
CorreoElectronico
Estas dos clases van a tener una relación uno a muchos.
public class Profesor implements Serializable { private int id; private String nombre; private String ape1; private String ape2; private Set<CorreoElectronico> correosElectronicos; public Profesor(){ } public Profesor(int id, String nombre, String ape1, String ape2) { this.id = id; this.nombre = nombre; this.ape1 = ape1; this.ape2 = ape2; } } public class CorreoElectronico implements Serializable { private int idCorreo; private String direccionCorreo; private Profesor profesor; public CorreoElectronico() { } public CorreoElectronico(int idCorreo,String direccionCorreo,Profesor profesor) { this.idCorreo=idCorreo; this.direccionCorreo=direccionCorreo; this.profesor=profesor; } }
En el listado 1 podemos ver cómo la clase Profesor
tiene una propiedad llamada correosElectronicos
de la clase CorreoElectronico
(línea 6) y además la clase CorreoElectronico
también posee referencia a Profesor
ya que hemos definido que la relación es bidireccional desde Profesor
hacia Direccion
y viceversa.
El mecanismo que usamos en Java para almacenar una serie de objetos hijo es el interfaz Set. No vamos a usar el interfaz List o un array ya que dichas formas implican un orden de los objetos hijo mientras que usando un Set no hay ningún tipo de orden. En la siguiente lección se explica cómo usar una lista ordenada de objetos hijo.
Profesor
y CorreoElectronico
no se han incluido los métodos get/set de cada propiedad para facilitar la lectura pero deben estar en la clase Java.
En el siguiente diagrama UML se ve que la relación desde Profesor
hacía CorreoElectronico
y viceversa.
La tablas de base de datos quedarían de la siguiente forma: