2011-08-08 4 views
0

중간에 양방향 다 대다 관계가있는 범주 유형과 항목 유형이 있습니다. 이 관계의 양면은 게으르다. HQL이나 ICriteria에서 다음을 수행하는 쿼리를 작성하고 싶습니다. 카테고리의 ID가 주어지면 모든 항목을 (열심히로드하는) 해당 항목의 카테고리 컬렉션과 함께로드하십시오. 그런 쿼리는 어떻게 생겼을까요?Eagarly many-to-many 관계를로드 중

나는까지로 가지고 :

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

하지만 열심히 각 항목의 카테고리 수집을로드하는 부분에 맞게하는 방법을 알아낼 수 없습니다.

이미 NHibernateUtil.Initialize()를 사용하여 작업하고 있습니다. 그러나 교육적으로 다른 방법을 시도해보고 싶습니다. 아마도 더 우아 할 수 있습니다. 그래서 현재 먼저, 관련 항목 및 카테고리 인스턴스에 ISession.Lock()를 호출하여 일하고 :

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

답변

0

는 이미 유래에 다른 답변에 difference between eager fetching and eager loading을 설명했다. 지금까지 내가 아는 한 컬렉션을로드하는 방법은 없습니다. 어떤 방법 으로든 액세스하거나 NHibernateUtil을 호출하여 컬렉션을로드 할 수 있습니다.

가장 우아한 방법은 컬렉션과 참조를 명시 적으로로드 할 필요가없는 응용 프로그램을 작성할 때입니다. 게으른 로딩은 비즈니스 로직에 투명해야합니다.