我与实体之间存在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();
但是它不会返回那些没有任何保留满足条件的区域。
答案 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
通过这种方式,您只有满足您要求的预订,尽管有不同的区域。