如何在JPQL中获取所有一个实体但过滤后的关系

时间:2017-09-13 09:45:06

标签: java jpa entity jpql

我与实体之间存在OneToMany关系:Area和Reservation。区域有许多预订(或没有),预订有一个区域。 我想查询所有区域,但是对于每个区域,我只有满足条件的预订。

到目前为止,我尝试过这样的事情:

em.createQuery("SELECT DISTINCT a FROM Area a LEFT JOIN a.reservations r WHERE r.startDate < :fromDate")
                .setParameter("fromDate", fromDate, TemporalType.TIMESTAMP)
                .getResultList();

但是它不会返回那些没有任何保留满足条件的区域。

2 个答案:

答案 0 :(得分:0)

这是因为您的查询有一个 Where 子句,它不会返回区域中存在的记录,但不会返回预订

在这里你想要的东西可能是JPA不支持 ON 子句而不是其中

  

JPA JPQL不支持对象之间的任意关系   被定义在&#34; on&#34;条款

那么可能是什么解决方案:

使用 SQL 查询代替 JPQL

根据您的对象表和字段值尝试使用以下内容:

em.createSQLQuery("SELECT DISTINCT a.area_name FROM area a LEFT JOIN a.reservations r ON r.start_date< :fromDate")
                .setParameter("fromDate", fromDate, TemporalType.TIMESTAMP)
                .getResultList();

答案 1 :(得分:0)

cant 部分填充@OneToMany集合。 由于您具有双向关系,因此可以从预订中反向查询实体:

SELECT r FROM Reservation r WHERE r r.startDate < :fromDate

通过这种方式,您只有满足您要求的预订,尽管有不同的区域。