java 带条件的左连接获取(Spring Data JPA)

zd287kbt  于 10个月前  发布在  Java
关注(0)|答案(1)|浏览(85)

我有一对多关系的座位和预订JPA实体。我想通过ID获取座位,预订状态为“ACTIVE”。如果座位没有任何此状态的预订,则应返回预订列表为空的座位。
以下查询在SQL控制台中工作:

select * from seats s left join bookings b on b.seat_id=s.id and b.status='ACTIVE' where s.id=1

字符串
我把它翻译成Spring Data JPA查询:

@Query("select s from Seat s left join fetch s.bookings b on b.seat.id=s.id and b.status='ACTIVE' where s.id = :seatId")


但我得到了这样的错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause not allowed on fetched associations; use filters

ldfqzlk8

ldfqzlk81#

你不能这样做--实体示例上的查询是为了获取那些实体在数据库中的状态,而不是为了操纵那些数据的Java视图。如果您只需要座位的有效预订,请查询有效预订。您的查询的更好翻译可能是:

"select s, b from Seat s left join s.bookings b on b.status='ACTIVE' where s.id = :seatId"

字符串
如果您的JPA提供者不喜欢join on子句,只需将其移动到where子句:

"select s, b from Seat s left join s.bookings b where s.id = :seatId and (b is null or b.status='ACTIVE')"


请注意,这将多次返回相同的座位。您可以自行收集座位和预订示例,并在需要时将其构建为DTO。

相关问题