Как наиболее эффективно (предварительно) загрузить дерево 1-ко-многим в JPA / Hibernate? - PullRequest
0 голосов
/ 04 июня 2019

Я ищу способ наиболее эффективной загрузки полного родительско-дочернего (один-ко-многим) (под) дерева сущностей с заданной корневой сущностью. Отношение определено для базового класса всех сущностей и является двунаправленным, отображаемым дочерним элементом.

Я знаю, что могу просто получить доступ к дочерним элементам (свойствам) и узнать, как заставить их загружаться (например, используя графы сущностей). Однако, учитывая 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.

Любая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...