

- 11/05/2023
- admin
- 0
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.
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.