#spring-boot #hibernate #kotlin #spring-data #criteria
#весенняя загрузка #переход в спящий режим #kotlin #весна-данные #критерии
Вопрос:
У меня есть объект Hotel и объект HotelReservation.
Я пытаюсь выбрать доступные отели, чтобы сделать заказ.
Идея:
Извлеките все отели и удалите те, которые недоступны. (Отель недоступен, если он зарезервирован в определенное время — в функции есть параметры from
-> to
). Я следовал примерам на stackoverflow.com и создайте этот код:
fun availableHotelsBetweenDates(from: ZonedDateTime, to: ZonedDateTime): Specification<Hotel> = Specification<Hotel> { root, query, cb ->
val reservationsBetweenDates: Subquery<HotelReservation> = query.subquery(HotelReservation::class.java)
val subqueryRoot = reservationsBetweenDates.from(HotelReservation::class.java)
val join: Join<Hotel, HotelReservation> = root.join("reservations", JoinType.LEFT)
reservationsBetweenDates.select(subqueryRoot.get("id"))
reservationsBetweenDates.where(activeReservationsBetweenDates(from, to).toPredicate(subqueryRoot, query, cb))
reservationsBetweenDates.distinct(true)
cb.not(join.get<Long>("id").`in`(reservationsBetweenDates))
}
Эта функция возвращает 0 объектов (должна возвращать 2 — потому что у меня есть 3 отеля и только одно бронирование для одного отеля).
Функция activeReservationsBetweenDates(from, to
) возвращает Specification<HotelReservation>
всех сохранений в отеле между from
, to
.
Как правильно использовать не в с подзапросом во вложенном поле?