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.Nuestro diagrama de entidad y relación sera algo así:
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
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