루트 엔티티를로드하고 모든 자식 콜렉션 및 집계 멤버를 열심히로드하려고합니다.NHibernate로 열망하는 자식 컬렉션
FluentNHibernate에서 SetFetchMode
을 사용하려고했지만 3 레벨의 깊이가 있으므로 하위 컬렉션 중 하나에서 복제가 발생합니다. DistinctRootEntityResultTransformer
은 불행히도 루트 중복 만 제거합니다.
return Session.CreateInvoiceBaseCriteria(query, archived)
.AddOrder(new Order(query.Order, query.OrderType == OrderType.ASC))
.SetFetchMode("States", FetchMode.Eager)
.SetFetchMode("Attestations", FetchMode.Eager)
.SetFetchMode("AttestationRequests", FetchMode.Eager)
.SetFetchMode("AttestationRequests.Reminders", FetchMode.Eager)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.List<Invoice>();
다중 쿼리 또는 이와 유사한 것을 사용할 수 있습니까?
또한이 접근 방식으로 인해 데이터베이스의 결과 집합이 불필요하게 커지지는 않습니까?
제안 사항?
실제로 좋은 기사이지만 내 상황에 적용 할 수 있는지 확실하지 않습니다. 특정 루트 엔티티를 로딩하는 것에 대한 기사에서 설명한 솔루션은 내 루트 엔티티 컬렉션을 열망하고 싶다. MultiCritera를 사용하려면 특정 엔티티를 지정하지 않고 모든 다른 쿼리를 연결하는 방법을 찾아야합니다. 그 방법을 제안 할 수 있습니까? – Kristoffer
그 예제는 단 하나의 추가 계층 구조 레벨을 가지고 있지만, 손주없는 MultiQuery/MultiCriteria는 이후 쿼리가 이전 쿼리 (예 : 쿼리 # 1)의 결과를 참조 할 수 없으므로 쓸데없는 것 같습니다. select rootObjects r left join fetch children c where ... ... 쿼리 # 2 : c)에서 parent가있는 grandchildren g을 선택합니다. –