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

Max*_*Max 2 left-join jpql playframework

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

我想知道JPQL是否支持LEFT JOIN的"复杂"ON条件.

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

  • '应用' - 应用程序列表
  • '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
Run Code Online (Sandbox Code Playgroud)

当然,"开启"状态下的"和"是必不可少的.

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

SELECT a.* FROM AggregationHistory ah  LEFT JOIN ah.app a WHERE ...
Run Code Online (Sandbox Code Playgroud)

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

我可以想到解决方法(比如,使用"本机查询",或使用JOIN来获取记录的应用程序列表,并进行比较).但我想知道我在SQL中进行的查询是否可以转换为JPQL.

谢谢

JB *_*zet 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
Run Code Online (Sandbox Code Playgroud)