Использование построителя критериев с не в присоединенном поле

#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 .

Как правильно использовать не в с подзапросом во вложенном поле?