Hibernate - Как эффективно получить большой граф объектов? - PullRequest
3 голосов
/ 01 августа 2011

Для проекта мне нужно прочитать список объектов из базы данных.Тип объекта - это большой граф объектов, состоящий из множества связанных объектов.Когда я выполняю запрос на выборку, чтобы получить список всех объектов в базе данных, Hibernate выполняет не только 1, но и 45 дополнительных запросов.Тем не менее, кажется, что объекты загружены лениво.

Но мне нужна эффективная загрузка списка ВСЕХ объектов.Каков наилучший способ сделать это?

Сначала я подумал об использовании выборочных соединений, но с таким количеством ассоциаций это могло стать настоящей болью.Есть ли лучшие решения?

1 Ответ

3 голосов
/ 01 августа 2011

Выборочные объединения и кэширование (или их комбинация) являются в основном единственными способами повышения производительности; будут ли они работать для вас, во многом зависит от того, как выглядят ваши сущности и что вы пытаетесь сделать.

Кэширование полезно для многозначных зависимостей с (несколько) ограниченным числом (идеально неизменных) экземпляров - например, поиск ссылок. Соединения извлечения могут использоваться для всех остальных «один к одному» и «многие к одному»; попытка получить вложенные коллекции быстро выходит из-под контроля очень .

Еще одна хитрость, которая применима в определенных случаях, - это предварительная загрузка (некоторых) ленивых зависимых объектов (если вы, конечно, знаете, что они есть заранее) в сеанс перед выполнением запроса. Таким образом, вам не придется сталкиваться с проблемами производительности / памяти кеша 2-го уровня в тех случаях, когда это нецелесообразно.

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

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