Playframework 如何在JPQL中执行复杂的左连接条件?
我正在使用JPQL进行Play框架中的模型查询 我想知道JPQL是否在左连接的条件下支持“complex” 在我的示例中,有两个表:Playframework 如何在JPQL中执行复杂的左连接条件?,playframework,left-join,jpql,Playframework,Left Join,Jpql,我正在使用JPQL进行Play框架中的模型查询 我想知道JPQL是否在左连接的条件下支持“complex” 在我的示例中,有两个表: “应用程序”-应用程序列表 “AggregationHistory”-每个应用程序、每个日期的聚合记录列表。在模型中,它具有表示 带有“App”的多对一(物理表中的列名为“App_id”) 假设我想计算没有特定日期记录的所有应用程序的列表 在纯SQL中,我使用以下查询获得结果: SELECT a.* FROM app a LEFT JOIN aggregati
- “应用程序”-应用程序列表
- “AggregationHistory”-每个应用程序、每个日期的聚合记录列表。在模型中,它具有表示 带有“App”的多对一(物理表中的列名为“App_id”)
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 ...
因此,支持的唯一“开启”条件是ID的“匹配”?(哪里似乎帮不了我多少忙)
我可以考虑解决方法(比如,使用“本机查询”,或者使用JOIN获取确实有记录的应用程序列表,并进行比较)。但是我想知道我在SQL中所做的查询是否可以转换成JPQL
谢谢JPQL,AFAIK不支持子句上的
,但HQL确实支持它们。用户选择将与
关键字一起使用,但:
select a from App a
left join a.history h with h.fromDate = :fromDate
where h.fromDate is null
谢谢只有一件事需要澄清。。。在当前的模型中,我没有“a.history”,只有“ah.app”。我试图通过:FROM AggregationHistory ah RIGHT加入ah.app a和ah.fromDate=:fromDate来完成。不幸的是:InvalidWithClauseException:with子句表达式未引用与with子句关联的子句元素。看起来WITH希望使用“a”而不是“ah”。唯一的解决方案是添加“a.history”?谢天谢地,我不知道。但是,具有双向关联在总体上极大地帮助制定查询,因此即使从未在对象模型中使用(甚至公开)也很有用。