Curso JPA Java
Hola, el artículo de hoy lo vamos a dedicar a aprender las relaciones @ManyToOne y @OneToMany de JPA para mapear entidades a una base de datos. Dentro de nuestro curso de muestro Máster profesional de Spring Framework y Spring Boot 3 abarcamos en profundidad esta relación y muchos otros más. Supongamos que estamos construyendo un software para gestionar un hotel y lo que queremos asignar a un hotel todas las reservas que sean necesarias, para ello tendremos que crear dos entidades llamadas HotelEntity y ReservationEntity, donde un hotel puede tener muchas reservas. El código de la clase HotelEntity quedaría de la siguiente manera:
public class HotelEntity {

 @Id
 @GeneratedValue(strategy = 
   GenerationType.IDENTITY)
 private Long id;

 @Column(length = 50)
 private String name;

 @Column(length = 50)
 private String address;

 private Integer rating;

 private BigDecimal price;

 @OneToMany(cascade = 
  CascadeType.ALL, fetch = 
  FetchType.EAGER, 
  orphanRemoval = true 
  ,mappedBy = "hotel")
 private Set reservation;
}
Podemos observar la anotación @OneToMany, la cual está mapeada a la entidad hotel, mediante la propiedad mappedBy, las otras propiedades son:
  • CascadeType.ALL: Esto quiere decir que insertamos, actualizamos o eliminamos una entidad, también se aplican estas operaciones a la entidad que se relaciona. En una relación @ManyToOne entre Club y Asociacion, si aplicamos alguna de las operaciones mencionadas anteriormente sobre Club, también se aplicará sobre Asociacion.
  • FetchType.EAGER: La carga de los objetos de la relación se produce en el mismo momento.
  • orphanRemoval = true: Con esto conseguimos que si eliminamos un registro de una entidad, también eliminamos los registros asociados a otras entidades relacionadas con esta.
Ahora le toca el turno a la clase ReservationEntity, quedando de la siguiente manera:
public class ReservationEntity implements Serializable {

    @Id
    private UUID id;

    @Column(name = "date_reservation")
    private LocalDateTime dateTimeReservation;
    private LocalDate dateStart;
    private LocalDate dateEnd;
    private Integer totalDays;
    private BigDecimal price;

    @ManyToOne
    @JoinColumn(name = "hotel_id")
    private HotelEntity hotel;
}
En esta entidad podemos observar la anotación @ManyToOne, la cual mediante la otra anotación @JoinColumn, conseguimos establecer la relación, siendo que muchas reservas pueden pertenecer a un hotel.
Tags:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies