当我使用多个关系路径时,Ebean查询运算符“获取”不起作用

时间:2018-08-16 17:23:56

标签: java orm ebean

据我了解,当我在查询对象时使用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

2 个答案:

答案 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查询的一部分)。

参考:https://ebean-orm.github.io/docs/query/fetch