Play框架JPA查询嵌套对象不可用

时间:2011-07-19 09:05:28

标签: hibernate jpa playframework

我有三个与彼此相关的物体。

@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上找到了我可以获得俱乐部,反之亦然。只是在这个查询中我找不到它。 模型对象是简化的,但应该提供足够的信息来解释我的问题。

任何想法为什么我无法根据嵌套对象俱乐部进行查询?

1 个答案:

答案 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

请注意,我们使用左(外)连接,这意味着即使汽车不存在,我们也应该得到结果