gpt4 book ai didi

java - 如何从对象中获取指定字段,检查List是否包含()对象?房间预订验证问题

转载 作者:行者123 更新时间:2023-12-02 05:35:03 25 4
gpt4 key购买 nike

这是我的实体:

 @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 +
'}';
}
}

这是我的验证方法:

@覆盖 公共(public)预订保存(预订预订){ validateDate(reservation.getDateIn(),reservation.getDateOut());

        List<ReservationRepository> bookedRooms = reservationRepository.findBookedRooms();

if (!bookedRooms.contains(reservation)) {
return reservationRepository.save(reservation);
}
return null;
}

findBookedRooms() 获取此 SQL 查询:

@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();

问题:在if语句中,bookedRooms获取List of:reservation.room_id、reservation.date_in、reservation.date_out参数,而reservation对象获取:reservation.id、reservation.date_in、reservation.date_out。因此,我们遇到了 rs.room_id - rs.id 冲突,因此“if 语句”将始终为 true。如何使我的预订对象获取这些特定参数:reservation.getRoom().getNumber()、预订。日期_输入,预订.date_out?

我需要此验证来检查预订特定房间时的日期是否没有冲突。

最佳答案

您的验证包括使用从数据库检索的列表中的 contains 方法,检查:“该列表包含此预订吗?”。

您的问题基本上是说 IF 语句始终评估为 true,因此它始终评估为:“此预订不在列表中!”

考虑到这一切,我相信您应该检查 List 接口(interface)中的 contains 方法是如何工作的。这个post对此有一些见解。

contains 方法使用 equals 方法来检查对象在列表中是否具有相等的对象。由于使用的两种类型不同(ReservationRepositoryReservation 不同),它将 100% 失败,除非您开始重写 equals 方法(考虑到您正在使用两种类型进行比较,我警告你,不要这样做)。

可能的解决方案:

循环遍历列表并在循环内部检查评估预订是否已存在于旅游数据库中所需的字段。在您的保存方法中执行此操作,或编写另一个方法以更好地组织代码。

循环可能如下所示:

boolean reservationExists = false;
for(ReservationRepository r:bookedRooms){
if (r.getRoom().equals(reservation.getRoom()) &&
r.getDateOut().equals(reservation.getDateOut()) &&
r.getDateIn().equals(reservation.getDateIn())) {
reservationExists = true;
break;
}
}

关于java - 如何从对象中获取指定字段,检查List是否包含()对象?房间预订验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com