Here is my entity:
@Entity
@Table(name = "reservation")
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "date_in")
private LocalDate dateIn;
@Column(name = "date_out")
private LocalDate dateOut;
@ManyToOne
private Guest guest;
@ManyToOne
private Room room;
public Reservation() {
}
public Reservation(LocalDate dateIn, LocalDate dateOut, Guest guest, Room room) {
this.dateIn = dateIn;
this.dateOut = dateOut;
this.guest = guest;
this.room = room;
}
public Guest getGuest() {
return guest;
}
public void setGuest(Guest guest) {
this.guest = guest;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public LocalDate getDateIn() {
return dateIn;
}
public void setDateIn(LocalDate dateIn) {
this.dateIn = dateIn;
}
public LocalDate getDateOut() {
return dateOut;
}
public void setDateOut(LocalDate dateOut) {
this.dateOut = dateOut;
}
@Override
public String toString() {
return "Reservation{" +
"id=" + id +
", dateIn=" + dateIn +
", dateOut=" + dateOut +
", guest=" + guest +
", room=" + room +
'}';
}
}
Here is my validation method:
@Override public Reservation save(Reservation reservation) { validateDate(reservation.getDateIn(), reservation.getDateOut());
List<ReservationRepository> bookedRooms = reservationRepository.findBookedRooms();
if (!bookedRooms.contains(reservation)) {
return reservationRepository.save(reservation);
}
return null;
}
findBookedRooms() gets this sql query:
@Query(value = "SELECT rs.room_id, rs.date_in, rs.date_out FROM reservation rs LEFT JOIN room r ON rs.room_id = r.id WHERE rs.id IS NOT NULL", nativeQuery = true)
List<ReservationRepository> findBookedRooms();
PROBLEM: In if statement bookedRooms gets List of:reservation.room_id, reservation.date_in, reservation.date_out parameters, whereas reservation Object gets:reservation.id,reservation.date_in, reservation.date_out. In consequence we've got rs.room_id - rs.id conflict, so "if statement" will always be true.How can I make my reservation object to get these specific parameters:reservation.getRoom().getNumber(), reservation.date_in, reservation.date_out?
I need this validation to check if there is no conflict in dates while booking specific room.