如何解决未在联接字段上使用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 举报,一经查实,本站将立刻删除。