Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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
Jpa JPQL左外部联接不执行不必要的联接_Jpa_Left Join_Jpql - Fatal编程技术网

Jpa JPQL左外部联接不执行不必要的联接

Jpa JPQL左外部联接不执行不必要的联接,jpa,left-join,jpql,Jpa,Left Join,Jpql,我有以下JPQL: SELECT a.b.id, a.b.name, a.c.id,a.c.name left join a.b left join a.c group by a.b.id,a.b.name,a.c.id,a.c.name 现在b和c都引用同一个表。 生成的SQL正在执行我要求的左连接,以及a.b.name和a.c.name的另一个连接 (这是不必要的,因为左联接包含名称,并且检索的结果比预期的多) 如何使生成的SQL不包含不必要的联接 出现的1个解决方案不是选择名称并通

我有以下JPQL:

SELECT a.b.id, a.b.name, a.c.id,a.c.name 
 left join a.b left join a.c
 group by a.b.id,a.b.name,a.c.id,a.c.name
现在b和c都引用同一个表。 生成的SQL正在执行我要求的左连接,以及a.b.name和a.c.name的另一个连接 (这是不必要的,因为左联接包含名称,并且检索的结果比预期的多) 如何使生成的SQL不包含不必要的联接

出现的1个解决方案不是选择名称并通过不同的查询分别检索它们。。但我认为这不是最优雅的方式

(顺便说一句,我尝试选择a.b、a.c和GROUPBY a.b、a.c,但它不会抛出ORA GROUPBY表达式,因为生成的sql检索所有行,但GROUPBY仅按ID) 左连接是必要的,因为我想允许空值

非常感谢

SELECT a.b.id, a.b.name, a.c.id,a.c.name 
上面隐式地在abd b、a和a与c之间创建了一个内部连接。查询应该是

select b.id, b.name, c.id, c.name
from A a
left join a.b b
left join a.c c
GROUPBY
子句没有任何意义,因为select子句中没有聚合<例如,如果您有,代码>分组依据将非常有用

select b.id, b.name, c.id, c.name, count(c.foo)
from A a
left join a.b b
left join a.c c
group by b.id, b.name, c.id, c.name
是的,我有一个计数(a),我没有提到,因为它实际上与我的问题没有任何关系。不管怎样,这似乎真的很有帮助,非常感谢。