2011-03-10 1 views
13

우선, 열심히로드하는 것을 꺼내려고 시도하지 마십시오. 오브젝트 그래프를 가로 지르고 데이터베이스에 대한 왕복 이동을 1 회 이상 수행하는 것만으로는 옵션이 아닙니다.NHibernate : 데이터베이스에 한 번의 왕복으로 많은 자식과 손자 (객체 그래프)의 열정적 인 subselect 페칭을 수행하는 방법?

큰 개체 그래프가 있습니다. 루트 객체를 가져오고 그 자식, 손주, 증손자 등 하위 집합을 가져 오려고합니다. 현재는 Future 개의 객체 (기준 포함)를 여러 개 생성하여이 작업을 수행하며 각각 하나씩 - Ayende's post을 참조하십시오. Sam's 3rd comment here. - 대단한 리프 (A.B.C.D), 루트에서 각 경로에 대한 한, 그러나 어떤 join 오히려 subselect보다 사용

  1. NHibernate에이 같은 왕복 여러 선택 쿼리를 수행 두 가지 문제가 있습니다 내가 정말로하고 싶은 것. join을 사용하면 데이터베이스에서 많은 양의 데이터를 보내고 구문 분석해야하며 nhibernate가 필요한 것보다 훨씬 많은 작업을 수행해야합니다.

  2. 문제 1의 결과로 어떤 경우에는 한 레벨 이상 중첩 된 객체가 중복됩니다.

내 컬렉션을 설정하여 "해결"두 번째 문제는 설정 될,하지만 내가 주문 능력을 잃게 - 내가 인터페이스와 ISet를 지정해야하기 때문에, 설정하면 내 코드가 알 수있는 방법이 없다 실제로는 OrderedSet입니다.

단일 라운드 트립에서 객체를 열렬하게로드하고 몇 개의 중첩 된 콜렉션을 수행하지만 결합을 사용하지 않는 방법을 아는 사람이 있습니까?

매우 감사드립니다. 나는 웹을 해답을 찾았으니이 벽에 처음으로 맞닥뜨린 사람은 아닌 것 같다.

답변

1

SetFetchMode를 한 번만 호출하여 별도의 쿼리를 만들고 MultiCriteria (또는 Futures 또는 원하는 것을 사용하여)를 사용하여 한 번에 실행할 수 있습니다. 그런 다음 첫 번째 쿼리의 결과 만 나와 관련이 있습니다. 이것은 단일 왕복으로 단일 결과를 제공합니다.

+0

바로 지금 내가하는 일입니다. 하지만 문제 번호 1을 해결하지 못합니다. 하위 선택이 아닌 조인을 사용하게됩니다. – sinelaw

+0

사실이 아닙니다. 내가 아는 한, nHibernate는 그것을 지원하지 않는다. 물론 DetachedQuery를 사용하여 subselect를 수행 할 수 있습니다. 하지만 nHibernate가 필요한 엔터티를 채우기 위해 그것을 사용할 수 있다고는 생각하지 않습니다. – Pieter

관련 문제