如何将LEFT JOIN和Where子句与JPQL结合?

Mik378:

我有两个JPA实体:

  • 时间表(包含预订清单)
  • 保留(包含日期字段:日期resDate)

我的目标是在检索所有计划时仅检索与日期参数(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为空”部分)

长答案:明确地说这对休眠/ JPA人员不起作用,但确实如此。生成的SQL也非常有效。如果有人能解释为什么这样做有效,那么我将印象深刻。我几年前就学会了这种模式,但我一生都记不清在哪里。

一注:有一个情况下,这将无法工作,这是在目前还没有预订此调度的实例。在这种情况下,我唯一能提供的答案是,您可以将查询包装在“ NoResultException”的try / catch中,然后再次查询而不带where子句(显然,如果没有保留,则没有保留带有resDate的保留。 planningDate)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将日期与WHERE子句结合

如何将 WITH 子句与 WHERE 子句结合使用

使用LEFT JOIN结合WHERE子句进行搜索

如何将INNER JOIN与GROUP BY子句结合使用?

如何将LAG函数与WHERE子句结合使用?

如何将sql multimple LEFT JOIN转换为linq

如何将 INSERT INTO 与 LEFT JOIN 一起使用?

如何用JPA 2 CriteriaQuery正确表达带有“ where”子句的JPQL“ join fetch”?

MySQL LEFT JOIN 与 GROUP BY 和 WHERE 子句查询

用 LEFT JOIN 和 where 子句替换 oracle 特定的符号 (+)

重用LEFT JOIN的问题导致WHERE和ORDER BY子句

HibernateCriteria left join with OR where 子句

MySQL LEFT JOIN的WHERE子句

如何使用JOIN和BETWEEN where子句加快MYSQL查询?

如何将GROUP BY与JOIN结合使用?

mySQL 将 WHERE IN (?,?,?,..) 子句与 %?% 结合使用

当与LEFT JOIN,WHERE和OR结合使用时,MySQL JOIN返回不相关的行

如何在Linq中将select和group by子句与条件where结合起来

如何通过where子句限制join子句

如何将 sql 查询转换为 linq LEFT OUTER JOIN

Oracle 11g XE:如何将LEFT SQL JOIN转换为使用半联接和相关查询的查询?

如何将 Join 与聚合函数和分组依据结合起来

使用WHERE子句的MySQL LEFT JOIN查询

LEFT JOIN查询中的WHERE子句

使用WHERE子句的SQL LEFT OUTER JOIN

如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

如何在LINQ中结合LEFT JOIN,GROUP BY和SUM?

Jquery 数据表:使用 Left Join 和 Where 子句计算记录

MySQL-使用LEFT OUTER JOIN和WHERE子句选择记录