java – 如何将LEFT JOIN和Where子句与JPQL组合?
我有两个JPA实体:
>附表(包含预约清单) 我的目标是仅在检索所有时间表时检索与日期参数(planningDate)匹配,无论在此给定日期是否存在保留. 所以我写道: SELECT s FROM Schedule as s LEFT JOIN s.reservations as r WHERE r.resDate = :planningDate order by s.startHour 为什么在这个日期没有预订的时间表,尽管我的LEFT JOIN? 可能,像本地查询一样,当与WHERE子句组合时,LEFT JOIN看起来像INNER JOIN. 那么,如何更改查询来满足我的要求?我没有在JPQL中找到一个特定的功能. 解决方法
啊,这确实是JPA的经典.
以下答案我提供 – 我无法解释为什么它的作品,但我可以解决这个为你 简短的答案,试试: SELECT s FROM Schedule as s LEFT JOIN s.reservations as r WHERE (r.resDate is null or r.resDate = :planningDate) order by s.startHour (这里的关键是“r.resDate为null”部分) 长答案: 一个注意事项:有一种情况不能正常工作,而在这种情况下,这个时间表没有任何保留.在这种情况下,我可以提供的唯一答案是可以将您的查询包装在“NoResultException”的try / catch中,并且在没有where子句的情况下重新查询(显然,如果没有保留,则在resDate上不存在任何保留planningDate) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |