Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Playframework 如何在JPQL中执行复杂的左连接条件?_Playframework_Left Join_Jpql - Fatal编程技术网

Playframework 如何在JPQL中执行复杂的左连接条件?

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

我正在使用JPQL进行Play框架中的模型查询

我想知道JPQL是否在左连接的条件下支持“complex”

在我的示例中,有两个表:

  • “应用程序”-应用程序列表
  • “AggregationHistory”-每个应用程序、每个日期的聚合记录列表。在模型中,它具有表示 带有“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 ...
因此,支持的唯一“开启”条件是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”?谢天谢地,我不知道。但是,具有双向关联在总体上极大地帮助制定查询,因此即使从未在对象模型中使用(甚至公开)也很有用。