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();