我有三个与彼此相关的物体。
@Entity
class Club extends Model
@OneToMany(cascade = CascadeType.ALL, mappedBy = "club")
public Set<Car> cars;
@Entity
class Car extends Model
@ManyToOne(cascade = CascadeType.PERSIST)
public Club club;
@Entity
class Booking extends Model
public Date startTime;
@ManyToOne(cascade = CascadeType.PERSIST)
public Car car;
public static Collection<Booking> bookingsForClubInPeriod(Club club, Date start, Date end){
return Booking.find("startTime > ? and startTime < ? and car.club = ?", start, end, club).fetch();
}
我可以搜索两次开始的预订,但是当我将car.club添加到查询中时,我得到零结果。
我也尝试将查询更改为: find(“startTime&gt;?and startTime&lt;?and car in?”,start,end,club.cars)但没有运气(这给了我这条消息:无法通过反射吸气器得到一个字段值models.Car.id 的
另一个尝试是将FetchType.EAGER添加到汽车和俱乐部,但这也没有帮助。
另外如果我在Car上找到了我可以获得俱乐部,反之亦然。只是在这个查询中我找不到它。 模型对象是简化的,但应该提供足够的信息来解释我的问题。
任何想法为什么我无法根据嵌套对象俱乐部进行查询?
答案 0 :(得分:1)
我不确定“魔术”游戏!添加到部分查询但这个Hibernate查询应该工作
select b from Booking b left join b.car car left join car.club club where b.startTime > :startTime and b.endTime < :endTime and club = :club
请注意,我们使用左(外)连接,这意味着即使汽车不存在,我们也应该得到结果