Vimos los tres tipos principales de relaciones:
One-To-Many (Uno-A-Muchos): Un registro en una tabla se relaciona con muchos registros en otra tabla.
@Entity
public class Cliente {
@Id
private Long id;
private String nombre;
@OneToMany(mappedBy = "cliente")
private List<Pedido> pedidos;
// Getters y setters
}
@Entity
public class Pedido {
@Id
private Long id;
private Date fecha;
@ManyToOne
@JoinColumn(name = "cliente_id")
private Cliente cliente;
// Getters y setters
}
Many-To-One (Muchos-A-Uno): Muchos registros en una tabla se relacionan con un registro en otra tabla.
@Entity
public class Empleado {
@Id
private Long id;
private String nombre;
@ManyToOne
@JoinColumn(name = "departamento_id")
private Departamento departamento;
// Getters y setters
}
@Entity
public class Departamento {
@Id
private Long id;
private String nombre;
@OneToMany(mappedBy = "departamento")
private List<Empleado> empleados;
// Getters y setters
}
Many-To-Many (Muchos-A-Muchos): Muchos registros en una tabla se relacionan con muchos registros en otra tabla.
En este último ejemplo, la tabla intermedia estudiante_curso contiene las columnas estudiante_id y curso_id, que son claves foráneas a las tablas Estudiante y Curso, respectivamente.
@Entity
public class Estudiante {
@Id
private Long id;
private String nombre;
@ManyToMany
@JoinTable(
name = "estudiante_curso",
joinColumns = @JoinColumn(name = "estudiante_id"),
inverseJoinColumns = @JoinColumn(name = "curso_id")
)
private List<Curso> cursos;
// Getters y setters
}
@Entity
public class Curso {
@Id
private Long id;
private String nombre;
@ManyToMany(mappedBy = "cursos")
private List<Estudiante> estudiantes;
// Getters y setters
}
Anotaciones de JPA para mapear estas relaciones en nuestras clases de entidad:
@OneToMany: Para relaciones uno-a-muchos. @ManyToOne: Para relaciones muchos-a-uno. @ManyToMany: Para relaciones muchos-a-muchos.