如何在JPQL中执行复杂的LEFT JOIN条件?

时间:2012-03-14 21:04:23

标签: playframework left-join jpql

我正在使用JPQL来进行Play Framework的模型查询。

我想知道JPQL是否支持LEFT JOIN的“复杂”ON条件。

在我的例子中,有2个表:

  • 'App' - 申请清单
  • 'AggregationHistory' - 每个应用程序的聚合记录列表,每个日期。在模型中,它有'app'字段代表 与'App'多对一(物理表中的列名'app_id')

假设我想计算具有特定日期记录的所有应用的列表。

在纯SQL中,我使用以下查询获得结果:

SELECT a.* FROM app a LEFT JOIN aggregationhistory ah 
ON a.id = ah.app_id AND ah.fromDate =  '2012-03-14 00:00:00' 
WHERE ah.fromDate is NULL

当然,“开启”状态下的“和”是必不可少的。

现在,我看到的所有JPQL示例都是:

SELECT a.* FROM AggregationHistory ah  LEFT JOIN ah.app a WHERE ...

那么,支持的唯一'ON'条件 - 是ID的“匹配”吗? (似乎对我帮助不大)

我可以考虑解决方法(例如,使用“本机查询”,或使用JOIN获取确实拥有记录的应用程序列表,并进行比较)。但我想知道我在SQL中创建的查询是否可以转换为JPQL。

由于

1 个答案:

答案 0 :(得分:9)

JPQL,AFAIK,不支持ON子句,但HQL确实支持它们。虽然选择使用with关键字:

select a from App a 
left join a.history h with h.fromDate = :fromDate
where h.fromDate is null