Я ищу способ наиболее эффективной загрузки полного родительско-дочернего (один-ко-многим) (под) дерева сущностей с заданной корневой сущностью. Отношение определено для базового класса всех сущностей и является двунаправленным, отображаемым дочерним элементом.
Я знаю, что могу просто получить доступ к дочерним элементам (свойствам) и узнать, как заставить их загружаться (например, используя графы сущностей). Однако, учитывая N сущностей, это все равно приведет к N запросам, по одному для получения дочерних элементов каждой из N сущностей, когда они запрашиваются. Я мог бы настроить графы сущностей для запроса извлечения фиксированного числа поколений детей, но это не относится к общему случаю, когда я не знаю глубину иерархии заранее.
Каков наилучший / наиболее эффективный способ их загрузки?
Думаю, я бы хотел загрузить их "по поколениям". Рассмотрим, например, следующее:
[A1] <-- Root
/ \
B1 B2 <-- 1st generation/layer
/ \ \
C1 C2 C3 <-- 2nd generation/layer
/ \ / \ / \
D1 D2 D3 D4 D5 D6 <-- 3rd generation/layer
... ... ...
... и предположим, что мне нужно получить поддерево с корнем в A1. Я мог бы получить A1 с его дочерними элементами B1 и B2, используя графы сущностей. Тем не менее, теперь мне нужно выбрать дочерние элементы как B1, так и B2, и я хотел бы иметь возможность сообщить Hibernate, что он может оптимизировать его (одним вызовом). На следующей итерации моего цикла я бы сказал Hibernate, что хотел бы получить дочерние элементы C1, C2 и C3. Я могу справиться с поколениями / слоями, но я не знаю, как использовать это в своих интересах с Hibernate.
Любая помощь?