2010-01-30 3 views
4

트리를로드하는 중 문제가 발생했습니다.이 경우는 n 레벨의 자체 (계층 적) 엔티티가 있습니다. 질문은 ICriteria 또는 HQL을 사용하여 전체 트리를 열심히로드 할 수 있습니까?Eager NHibernate에서 트리를로드하는 중

미리 도움을 청하십시오. Ariel

답변

1

예 ... 올바른 fetchmode를 설정하십시오.


분 안에 예제가 포함됩니다.


예 촬영 from here =>

IList cats = sess.CreateCriteria(typeof(Cat)) 
    .Add(Expression.Like("Name", "Fritz%")) 
    .SetFetchMode("Mate", FetchMode.Eager) 
    .SetFetchMode("Kittens", FetchMode.Eager) 
    .List(); 
당신은 너무 =>

아이의 열망로드 아이
.SetFetchMode("Kittens.BornOn", FetchMode.Eager) 
당신이 NHibernate에 Linq에를 사용하는 경우

에 지정할 수 있습니다

, 확장 메소드 사용 =>

var feedItemQuery = from ad in session.Linq<FeedItem>().Expand("Ads") 
          where ad.Id == Id 
          select ad; 

그리고 람다 식으로 전달 된 문자열을 만드는 도우미 메서드를 사용하는 것이 좋습니다.


전체 트리를로드하도록 Criteria에 지시 할 가능성이 매우 높습니다. 하지만 나는 그것에 대해 알지 못하며 정확하게 필요한 것을 지정하는 것을 선호합니다 (모든 것을로드하는 것은 위험한 것처럼 보입니다).


this은 도움이됩니까?

+4

FetchMode를 사용하여 엔티티와 관련된 콜렉션을로드 할 수 있다는 것을 알고 있지만, 다음 레벨뿐만 아니라 전체 트리를로드하려고합니다. 내가 할 것이다 당신의 접근 방식을 사용 : .SetFetchMode ("어린이", FetchMode.Join) .SetFetchMode ("Children.Children", FetchMode.Join) .SetFetchMode ("Children.Children.Children을" FetchMode.Join) 등 – Argons

관련 문제