Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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
Java “Ebean查询运算符”;取回;isn';当我使用多个关系路径时无法工作_Java_Orm_Ebean - Fatal编程技术网

Java “Ebean查询运算符”;取回;isn';当我使用多个关系路径时无法工作

Java “Ebean查询运算符”;取回;isn';当我使用多个关系路径时无法工作,java,orm,ebean,Java,Orm,Ebean,我的理解是,当我在查询对象时使用fetch时,Ebean将尝试使用连接来获取关系 e、 g 当尝试获取一个关系时,这将按预期工作。 但是当我尝试fetch多个关系时,它不会使用连接查询任何关系,而是使用单独的查询获取所有关系 e、 g 我应该能够根据本文档页面中的代码示例来完成这项工作。 我使用“*”表示fetchProperties并为我工作 Ebean.find(ProjectRequest.class) .fetch("projectConstruction

我的理解是,当我在查询对象时使用
fetch
时,Ebean将尝试使用连接来获取关系

e、 g

当尝试获取一个关系时,这将按预期工作。

但是当我尝试
fetch
多个关系时,它不会使用连接查询任何关系,而是使用单独的查询获取所有关系

e、 g

我应该能够根据本文档页面中的代码示例来完成这项工作。

我使用“*”表示fetchProperties并为我工作

Ebean.find(ProjectRequest.class)
                .fetch("projectConstructionCosts", "*")
                .fetch("attachments", "*")
                .fetch("projectRequestComments", "*")
                .fetch("additionalContacts", "*")
                .where()
                .in("project_status", projectStatusValues)
                .findList();
它不使用联接查询任何关系,而是使用单独的查询获取所有关系

Ebean不使用SQL连接,而是创建额外的单独查询来加载这些关联的原因是,这些关系是对许多关系的
,并且Ebean永远不会生成SQL笛卡尔乘积(因为它被认为风险太高/成本太高)

也就是说,Ebean只允许在“根查询”(为了避免使用sql-cartiesian产品)中包含一个
ToMany
关系,然后将其他关系作为“辅助查询”加载

另外请注意,如果查询包含一个
max rows
限制,那么Ebean将在生成的SQL中遵守该限制。在这种情况下,Ebean不能将SQL连接包含到
ToMany
,这将成为“二次查询”(不是根SQL查询的一部分)

参考:

Ebean.find(ProjectRequest.class)
                    .fetch("projectConstructionCosts")
                    .fetch("attachments")
                    .fetch("projectRequestComments")
                    .fetch("additionalContacts")
                    .where()
                    .in("project_status", projectStatusValues)
                    .findList();
Ebean.find(ProjectRequest.class)
                .fetch("projectConstructionCosts", "*")
                .fetch("attachments", "*")
                .fetch("projectRequestComments", "*")
                .fetch("additionalContacts", "*")
                .where()
                .in("project_status", projectStatusValues)
                .findList();