Hibernate Lazy с использованием загрузки Initilize или EAGER - PullRequest
0 голосов
/ 02 февраля 2011

У меня есть три таблицы,

users
user_associations
association_type.

Пользователи связаны друг с другом через таблицу users_associations, а затем ассоциации присваивается такой тип, как PARENT или FRIEND и т. Д.

Когда я вызываю свое представление, у меня есть данные таблицы для ассоциаций пользователей друг с другом.Внутри каждого списка есть связь с текущими данными пользователей, данными связанных пользователей и списком типов ассоциаций.

Я использую Hibernate, и я запутался между EAGER, получающим данные и LAZY, загружающим их.Когда я вызываю мой DAO, он выглядит так:

List<UsersAssoc> assoc = (List<UsersAssoc>)session.getNamedQuery("UsersAssoc.getAssoc").setInteger("id", id).list();

Чтобы заставить LAZY загружаться, я должен вызвать Hibernate.initialize для всех подчиненных объектов

    for(UserAssoc a : assoc ) {
           Hibernate.initialize(a.getUser() );
           Hibernate.initialize(a.getAssocTypes() );
           Hibernate.initialize(a.getAssociatedUser() );
    }

Мне нужно обратитьсяко всем данным, на мой взгляд, и я пытаюсь сделать это, не сохраняя все это в памяти.Какой вариант самый лучший?Загрузите его или инициализируйте каждый тип в Hibernate.Это может даже не быть правильным способом сделать это.Мне нужно какое-то направление.Спасибо

1 Ответ

0 голосов
/ 02 февраля 2011

lazy описывает, загружаются ли коллекции немедленно, поэтому, если у вас есть lazy = false, hibernate по умолчанию будет загружать коллекцию при загрузке родительского элемента.Это атрибут отображения.

при использовании hql ваша стратегия выборки переопределяет настройку в вашем отображении.Из документации:

Соединение «извлечение» позволяет инициализировать ассоциации или коллекции значений вместе с их родительскими объектами, используя один выбор. Это особенно полезно в случае коллекции. Оно эффективно переопределяетВнешнее объединение и ленивые объявления файла сопоставления для ассоциаций и коллекций. Для получения дополнительной информации см. Раздел 19.1, «Стратегии выборки». "

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

Обычно все ваши сопоставлениябыть ленивым ложным, но иметь специализированные методы DAO на основе hql, чтобы вы могли получать свои данные особым образом для конкретных случаев.

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