Spring Boot 运行数据状态检查过程后,将更新数据库中的Sping Boot 数据

gt0wga4j  于 2023-10-16  发布在  Spring
关注(0)|答案(1)|浏览(135)

我很沮丧,因为我写的这些Java代码块。我编写这些代码块来检查数据的座位可用性状态,然后保存预订数据。在比较过程之后,我注意到我的主座位表中的数据已经更新了,我很确定代码不应该更新我的主座位表中的数据。下面是该代码的片段。

public List<CheckInSeatResponse> getGroupSeatData(Long serviceId, Date departDate, String departGroup, String destinationGroup, Long busId) {
    try {
        List<CheckInSeatResponse> manifestData = manifestPassengerRepository.getGroupSeatData( departDate, departGroup, destinationGroup, busId, serviceId);
        return manifestData;
    } catch (Exception e) {
        log.error(e.getMessage());
        return null;
    }
}
public List<Seat> getGroupSeatMap(Long serviceId, Date departDate, String departGroup, String destinationGroup, Long busId) {
    try {
        List<CheckInSeatResponse> manifestData = getGroupSeatData( serviceId, departDate, departGroup, destinationGroup, busId);
        List<Seat> seatData = seatBusRepository.findByBusIdOrderByIdAsc(busId);
        List<Seat> seatMap = new ArrayList<>();
        if (manifestData != null) {
            for (Seat seat : seatData) {
                Seat newSeat = seat;
                for (CheckInSeatResponse seatCheck : manifestData) {
                    if (seatCheck.getSeatNumber() != null && seatCheck.getSeatNumber().equals(seat.getSeatNumber())) {
                        newSeat.setSeatStatus("notAvailable");
                    }
                }
                seatMap.add(newSeat);
            }
            return seatMap;
        } else {
            return seatData;
        }
    } catch (Exception e) {
        log.error(e.getMessage());
        return null;
    }
}

这里的检查过程代码

List<Seat> seats = manifestService.getGroupSeatMap(
        reservation.getServiceBusId(),
        reservation.getDepartureDate(),
        depart.getGroupDestination(),
        destination.getGroupDestination(),
        request.getDepartBusId());
for (DetailCheckInResultResponse passenger : request.getPassenggerDepart()) {
    for (Seat seat : seats) {
        if (passenger.getSeat().equals(seat.getSeatNumber()) && "notAvailable".equals(seat.getSeatStatus())) {
            response.setStatus("failed");
            response.setMessage("Seat " + seat.getSeatNumber() + " not available");
            return response;
        }
    }
}
if (reservation.getReservationType()) {
    List<Seat> seatRets = manifestService.getGroupSeatMap(
            reservation.getServiceBusId(),
            reservation.getReturnDate(),
            destination.getGroupDestination(),
            depart.getGroupDestination(),
            request.getReturnBusId());
    for (DetailCheckInResultResponse passenger : request.getPassenggerReturn()) {
        for (Seat seat : seatRets) {
            if (passenger.getSeat().equals(seat.getSeatNumber()) && "notAvailable".equals(seat.getSeatStatus())) {
                response.setStatus("failed");
                response.setMessage("Seat " + seat.getSeatNumber() + " not available");
                return response;
            }
        }
    }
}

我在这个代码块上做错了什么?
我的env详细信息

  • Spring框架:2.3.1
  • 简体中文(zh_cn)
  • Maven插件:2.22.0
  • 数据库管理系统:PostgreSQL 13.8

请帮帮我先谢谢你。
此致,
大卫
我尝试将数据转换为字符串列表,并将其解析为JSON,这样数据就不会被更改。它的工作,但我相信这需要更多的资源,所以我希望在主座位表座位状态没有更新后保存预订数据与我目前的代码。

bhmjp9jg

bhmjp9jg1#

如果您提供更多关于主座位表表示的信息,可能会有所帮助。您的主座位表是否表示为JPA实体?Seat就是这样吗
在任何情况下,如果您在Seat对象上设置一些数据,则很有可能在刷新后将其持久化。它可以被一些触发事件刷新,或者如果你的代码被 Package 在@ transmitted中。
您还可以在任何实体上查找任何CascadeType.PERSIST,因为这也可能会向其他实体添加您可能不期望的额外数据。
可以尝试的一件事是在hibernateshowqueries设置为true的情况下打开调试日志级别。这可以帮助您跟踪代码中错误持久化发生的位置。

相关问题