Есть еще много переменных:
- Дочерние объекты одного типа? Если это так, вы можете выбрать их все одновременно, а затем установить отношения родитель / потомок в слое сопоставления объектов.
- Могут ли дочерние объекты иметь собственных детей? Если вложение не ограничено, вы не сможете получить все данные одновременно, если не получите все данные.
Вы, конечно, могли бы объединить все клиенты-> заказы-> элементы заказа и разбить все на части в коде, но, похоже, это потребовало бы много времени в дублированных родительских строках и много работы при обработке этот большой беспорядок.
Попытка избежать нескольких вызовов может быть преждевременной оптимизацией. У вас проблемы с производительностью при слишком большом количестве обращений к базе данных?
Редактировать: Основываясь на ваших комментариях, вы сможете выполнить один запрос на уровень иерархии:
Select * from orders
where orders.customerid = my_customer_id
- Выполнить некоторые сопоставления orm и составить список идентификаторов дочерних объектов -
Select * from child_order_object
where child_order_object_id in (list of child object ids)
- сделать еще несколько сопоставлений ORM и связать дочерние объекты с предыдущими родительскими объектами -
...
- Повторите для других уровней -
Вы должны иметь возможность иметь только один запрос на уровень взаимосвязи, а не растущее количество запросов, чтобы получить только один объект по идентификатору.