Я новичок в Hibernate, но имею большой опыт работы с Entity Framework в C#. Одна из особенностей, которую я люблю, - это способность динамически решать, что немедленно загружать в запрос. Например, рассмотрим взаимосвязь «один-ко-многим» класса и студенческих сущностей.Dynamic Eager & Lazy Загрузка в спящем режиме
На странице «Просмотр классов» Я могу это сделать:
context.Configuration.EnableLazyLoading = true; //default option
List<Classes> classes = context.Classes.ToList();
Теперь я могу с радостью просто показать данные класса, не тратя ресурсы сбор студенческих данных. Только тогда, когда пользователь нажимает кнопку «Просмотр классов с реестрами» я делаю следующее:
context.Configuration.EnableLazyLoading = true;
List<Classes> classes = context.Classes.Include(c => c.Students).ToList();
С этим одно выступлением, я был в состоянии решить, что в данной конкретной ситуации, я хочу, чтобы захватить всю информацию сразу , Не два запроса. Не сто запросов. Только один запрос. Все, несмотря на загрузку только классов за несколько секунд до этого.
Все мое чтение в Hibernate объясняет, как вы можете указать lazy = "true | false" в файлах конфигурации отношений, но я действительно хочу, чтобы можно было решить, когда загружать коллекции «на лету». В конце концов, меня не интересует покупка автомобиля, который проходит всего 30 миль в час или 60 миль в час. Мне нужно выбрать скорость в зависимости от того, где я.
Возможно, вариант использования режима выборки как JOIN приемлем тем, что в этой ситуации будут только два запроса (один для класса и один для студентов), но мне очень понравилось иметь возможность делать все это в одном запросе, особенно если у меня есть несколько дочерних коллекций для загрузки и вы не хотите выполнять запрос для каждой связи. Я понимаю, что объединения «все-в-одном» создают дополнительные данные, которые необходимо передать, но я удивлен, что этот уровень контроля нелегко сделать или может быть полностью недоступен.
Что вы хотите сказать? –