Eagarly загружая отношения многих ко многим - PullRequest
0 голосов
/ 08 августа 2011

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

Я дошел до:

session.CreateQuery( "from Category c left join fetch c.Items where c.ID = :cid" )
        .SetParameter( "cid", ofCategory.ID )
        .List();

Но я не могу понять, как вписаться в часть, которая охотно загружает коллекцию категорий каждого элемента.

Обратите внимание, что у меня уже есть работа с использованием NHibernateUtil.Initialize (). Однако ради образования я хочу попробовать другой способ - возможно, более элегантный. Так что в настоящее время он работает, сначала вызывая ISession.Lock () для связанных экземпляров Item и category, затем:

foreach ( Item i in ofCategory.Items ) {
if ( !NHibernateUtil.IsInitialized(i.Categories) )
    NHibernateUtil.Initialize( i.Categories );
}

1 Ответ

0 голосов
/ 08 августа 2011

Я уже объяснил разницу между активной загрузкой и активной загрузкой в другом ответе на stackoverflow.Насколько я знаю, нет другого способа загрузить коллекции, кроме как получить к ним доступ каким-либо образом или вызвать NHibernateUtil.

. Самый элегантный способ - это когда вы пишете приложение, которое вы не используете.Не нужно загружать любые коллекции и ссылки явно.Ленивая загрузка должна быть прозрачной для бизнес-логики.

...