未在联接字段上使用Criteria Builder的用法

问题描述

我有一个酒店实体和一个酒店预订实体。

我尝试获取可用的酒店进行预订。

想法

获取所有酒店并删除不可用的酒店。 (如果旅馆在一定时间内被保留,则该旅馆不可用-在功能上,有参数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,cb))
    reservationsBetweenDates.distinct(true)
    cb.not(join.get<Long>("id").`in`(reservationsBetweenDates))
}

函数返回0个实体(应返回2个-因为我有3家酒店,并且只有一间酒店预订)。 函数activeReservationsBetweenDates(from,to)返回Specification<HotelReservation>from间的所有HotelReservation的to

如何对嵌套字段的子查询正确使用不在

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)