据我了解,当我在查询对象时使用fetch
时,Ebean会尝试使用联接来获取关系。
例如
Ebean.find(ProjectRequest.class)
.fetch("attachments")
.findList();
当尝试获取一种关系时,此方法可以正常工作。
但是,当我尝试fetch
涉及多个关系时,它不会通过联接查询任何关系,而是通过单独的查询来获取所有关系。
例如
Ebean.find(ProjectRequest.class)
.fetch("projectConstructionCosts")
.fetch("attachments")
.fetch("projectRequestComments")
.fetch("additionalContacts")
.where()
.in("project_status", projectStatusValues)
.findList();
我应该能够根据本文档页面中的代码示例执行此操作。 https://ebean-orm.github.io/apidoc/10/io/ebean/FetchConfig.html
答案 0 :(得分:1)
我将“ *”用于fetchProperties并为我工作
Ebean.find(ProjectRequest.class)
.fetch("projectConstructionCosts", "*")
.fetch("attachments", "*")
.fetch("projectRequestComments", "*")
.fetch("additionalContacts", "*")
.where()
.in("project_status", projectStatusValues)
.findList();
答案 1 :(得分:0)
它不通过联接查询任何关系,而通过单独的查询获取所有关系
Ebean不使用SQL联接而是创建其他单独的查询来加载这些关联的原因是因为这些关系是ToMany
关系,并且Ebean永远不会生成SQL笛卡尔积(因为它被认为太冒险了/太昂贵了) )。
也就是说,Ebean将只允许ToMany
关系之一包含在“根查询”中(以避免sql cartiesian产品),然后将其他关系作为“第二查询”加载。
另外请注意,如果查询包括一个max rows
限制,那么Ebean将在生成的SQL中接受该限制。在这种情况下,Ebean无法将SQL连接包括到ToMany
中,这将成为“辅助查询”(不属于根SQL查询的一部分)。