Hibernate: Asociaciones entre entidades
Aprende a manejar asociaciones entre entidades en Hibernate. Guía actualizada para 2024 con ejemplos prácticos y recomendaciones.
Aprende Hibernate GRATIS y certifícateEn Hibernate, las asociaciones entre entidades se pueden clasificar principalmente en tres tipos:
- Uno a uno (One-to-One)
- Uno a muchos (One-to-Many)
- Muchos a muchos (Many-to-Many)
Asociación uno a uno
Una asociación uno a uno se utiliza cuando una entidad está relacionada con exactamente una instancia de otra entidad. Para definir una asociación uno a uno en Hibernate, se utiliza la anotación @OneToOne
.
@Entity
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "perfil_id", referencedColumnName = "id")
private Perfil perfil;
}
@Entity
public class Perfil {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String bio;
}
En este caso, la entidad Usuario
tiene una asociación uno a uno con la entidad Perfil
.
Asociación uno a muchos
Una asociación uno a muchos se utiliza cuando una entidad está relacionada con múltiples instancias de otra entidad. Para definir una asociación uno a muchos en Hibernate, se utiliza la anotación @OneToMany
.
@Entity
public class Autor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "autor", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Libro> libros = new ArrayList<>();
}
@Entity
public class Libro {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
@ManyToOne
@JoinColumn(name = "autor_id")
private Autor autor;
}
En este ejemplo, la entidad Autor
tiene una asociación uno a muchos con la entidad Libro
.
Asociación muchos a muchos
Una asociación muchos a muchos se utiliza cuando múltiples instancias de una entidad están relacionadas con múltiples instancias de otra entidad. Para definir una asociación muchos a muchos en Hibernate, se utiliza la anotación @ManyToMany
.
@Entity
public class Estudiante {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(
name = "estudiante_curso",
joinColumns = @JoinColumn(name = "estudiante_id"),
inverseJoinColumns = @JoinColumn(name = "curso_id")
)
private Set<Curso> cursos = new HashSet<>();
}
@Entity
public class Curso {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
@ManyToMany(mappedBy = "cursos")
private Set<Estudiante> estudiantes = new HashSet<>();
}
En este caso, la entidad Estudiante
tiene una asociación muchos a muchos con la entidad Curso
.
Consideraciones adicionales
Al trabajar con asociaciones en Hibernate, es importante tener en cuenta aspectos como el manejo de transacciones, la configuración de fetch type
(por ejemplo, LAZY
o EAGER
), y el uso de cascade type
para definir cómo se propagan las operaciones de persistencia. Además, es fundamental prestar atención a la gestión de las claves primarias y foráneas para mantener la integridad referencial en la base de datos.
Lecciones de este módulo de Hibernate
Lecciones de programación del módulo Asociaciones entre entidades del curso de Hibernate.
Ejercicios de programación en este módulo de Hibernate
Evalúa tus conocimientos en Asociaciones entre entidades con ejercicios de programación Asociaciones entre entidades de tipo Test, Puzzle, Código y Proyecto con VSCode.