Páginas

jueves, 7 de mayo de 2015

Hibernate - Hibernate con annotations relaciones uno a Muchos – Relacion @OneToMany

Buenos días!, hoy vamos a continuar con Hibernate y con annotations, hoy vamos hablar puntualmente el tipo de relación One to Many, es decir de uno a muchos.

Hibernate - Hibernate con annotations relaciones uno a Muchos – Relacion @OneToMany




Hibernate - Relación @OneToMany

El tipo de relación uno a muchos es unidireccional es decir una persona tiene muchas películas, un alumno tiene muchos cursos (por el momento) etc. Podemos darnos cuenta cuando es unidireccional cuando un objeto del lado X se relaciona con varios objetos del lado Y.

Hibernate - Hibernate con annotations relaciones uno a Muchos – Relacion @OneToMany


Nuestro diagrama de entidad y relación sera algo así:

Hibernate - Hibernate con annotations relaciones uno a Muchos – Relacion @OneToMany

Utilizaremos el ejemplo de Alumno, Curso. Pero como vemos en el diagrama de entidad relación podemos hacer si bien que Y contenga un campo de  X a modo de identificar pertenencia o una tabla intermedia que guarde toda la información. En mi caso generare una tabla intermedia

Diagrama de entidad relación

Hibernate - Hibernate con annotations relaciones uno a Muchos – Relacion @OneToMany


Código Hibernate:


Clase Alumno
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table (name = "Alumnos")
public class Alumno implements Serializable {


 private static final long serialVersionUID = -321494369631390297L;
 private int idAlumno;
 private String nombre;
 private Set<Curso> cursos = new HashSet<Curso>(); 

 //Getters and Setters
 @Column (name="nombre")
 public String getNombre() {
  return nombre;
 }
 public void setNombre(String nombre) {
  this.nombre = nombre;
 }
 @Id
 @Column (name="idAlumno")
 public int getIdAlumno() {
  return idAlumno;
 }
 public void setIdAlumno(int idAlumno) {
  this.idAlumno = idAlumno;
 }
 @OneToMany(cascade = CascadeType.ALL)
 @JoinTable(name = "alumnos_cursos", joinColumns = { @JoinColumn(name = "idAlumno") }, inverseJoinColumns = { @JoinColumn(name = "idCurso") })
 public Set<Curso> getCursos() {
  return cursos;
 }
 public void setCursos(Set<Curso> cursos) {
  this.cursos = cursos;
 }
}


Clase Curso
import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "curso")
public class Curso implements Serializable {

 private static final long serialVersionUID = 1L;
 @Id
 private int idCurso;
 private String nombreCurso;

 public int getIdCurso() {
  return idCurso;
 }

 public void setIdCurso(int idCurso) {
  this.idCurso = idCurso;
 }

 public String getNombreCurso() {
  return nombreCurso;
 }

 public void setNombreCurso(String nombreCurso) {
  this.nombreCurso = nombreCurso;
 }

 public Curso() {
 };

 public Curso(int idCurso, String nombreCurso) {
  super();
  this.idCurso = idCurso;
  this.nombreCurso = nombreCurso;
 }

}


Habiendo puesto el código ahora explicaremos un poco mas como funciona el @OneToMany, al decirle que el uno a mucho decimos este objeto tiene una lista del otro.
Existen diferentes tipos de "guardados en cascadas" en nuestro caso ahora solo mostraremos este y mas adelante los detallaremos.

(cascade = CascadeType.ALL)

Con el annotation que se encuentra debajo del @OneToMany el @JoinTable este juntara en la tabla "Alumnos_Cursos" el id del alumno que justamente coincide con idAlumno y lo guardara en la tabla Alumnos_Cursos en el campo que detallamos "idAlumno y luego le diremos toma de la otra entidad el id mediante el "inverseJoinColumns" tomara el id de curso y lo guardara en la tabla Alumnos_cursos campo idCurso.

Saludos

No hay comentarios:

Publicar un comentario