Я работаю над проектом с богатой объектной моделью с различными наборами совокупных корней.Яркая загрузка ленивых загруженных объектов в nHibernate с использованием ActiveRecord
Мы используем Замок стек (монорельс до nHibernate с ActiveRecord).
Мы отметили совокупные корни как ленивые [ActiveRecord(Lazy = true)]
и настроили поддельные подпрограммы в нашем репозитории, чтобы получить выборку графа объектов. Мы используем HQL для определения желаемых выборок из нашей дочерней коллекции нашего корня,
например. если Account
- это совокупный корень (и отмеченный ленивым загруженным), мы будем получать выборки Account .. Order .. Product
объектов для полного графика.
Так что никаких сюрпризов пока (надеюсь).
Теперь, если в приведенном выше примере Продукт также отмечен [ActiveRecord(Lazy = true)]
, это, похоже, остановит директиву fager fetch в HQL.
Кто-нибудь знает способ принудительного извлечения ленивого загруженного дочернего объекта ??
Приветствия Иэн
Update:
Ok вот несколько примеров HQL, используя пример из 'me.yahoo.com/../1' ниже, мы используем IMuliQuery для reslove N + 1 зависимостей при наборе отношений «многие ко многим». Мы также явно используем классы отображения многих-ко-многим. В результате наша HQL является:
from Account a 'm eager loading the graph
inner join fetch a.AccountsOrders ao
inner join fetch ao.Order
from Account a 'm eager loading the graph
inner join fetch a.AccountAddresses aa
inner join fetch aa.Address ad
where a.ID = ?
... так что выполняет операторы 2 SQL и возвращает необходимый минимальный набор строк, и мы можем решить эту проблему вниз в один граф объектов. Ницца.
... Но если, скажем, Address
был отмечен ленивым загружен (и Order
не было), доступ к Order
не влечет за собой дополнительные операторы SQL, но доступ к Address
делает, несмотря на то, как охотно загружены.
Так почему же не ленивый загруженный объект Address
, выше, нетерпеливый из приведенного выше утверждения?
, пожалуйста, напишите hql –
Он был решен с обновлением nHibernate. – penderi