Aprender a modelar relaciones entre tablas en Java usando JPA, como por ejemplo:
@OneToMany (uno a muchos)
@ManyToOne (muchos a uno)
@OneToOne (uno a uno)
@ManyToMany (muchos a muchos)
En este ejemplo vamos a modelar una relación simple: Una Persona puede tener varias Direcciones.
package com.ejemplo.demo.entidad;
import jakarta.persistence.*;
import java.util.List;
@Entity
public class Persona {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
@OneToMany(mappedBy = "persona", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Direccion> direcciones;
// Constructores, getters y setters
}
Anotaciones clave:
@OneToMany(mappedBy = "persona"): Declara una relación de uno a muchos. Una persona puede tener varias direcciones.
- mappedBy = "persona": indica que el atributo que mantiene la relación está del otro lado (Direccion.persona).
- cascade = CascadeType.ALL: al guardar o eliminar una persona, se aplican los cambios también a sus direcciones.
- orphanRemoval = true: elimina direcciones si se quitan de la lista.
Entidad Direccion:
package com.ejemplo.demo.entidad;
import jakarta.persistence.*;
@Entity
public class Direccion {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String calle;
private String ciudad;
@ManyToOne
@JoinColumn(name = "persona_id")
private Persona persona;
// Constructores, getters y setters
}
Anotaciones clave:
@ManyToOne: Cada dirección pertenece a una sola persona.
@JoinColumn(name = "persona_id"): Crea una columna en la tabla direccion llamada persona_id que actúa como clave foránea a la tabla persona.
Las listas deben ser inicializadas como new ArrayList<>() si se van a usar directamente.
Si no usás orphanRemoval, las direcciones quedan "huérfanas" si quitás una de la lista.
Un pequeño ejemplo para que vayamos incrementando nuestro conocimiento en JPA.