我有一对多关系的座位和预订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
型
1条答案
按热度按时间ldfqzlk81#
你不能这样做--实体示例上的查询是为了获取那些实体在数据库中的状态,而不是为了操纵那些数据的Java视图。如果您只需要座位的有效预订,请查询有效预订。您的查询的更好翻译可能是:
字符串
如果您的JPA提供者不喜欢join on子句,只需将其移动到where子句:
型
请注意,这将多次返回相同的座位。您可以自行收集座位和预订示例,并在需要时将其构建为DTO。