개체를 나는 다음과 같은 기준 쿼리 (람다 확장을 사용하여)가이 제대로 작동NHibernate에이 - 손자에 모드를 가져 오기 설정
var workflowResult = repository.GetSession()
.CreateCriteria<Core.Domain.Application>()
.SetFetchMode<Core.Domain.Application>(app => app.ApplicationWorkflows, FetchMode.Join)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.Future<Core.Domain.Application>();
합니다. 각 응용 프로그램은 ApplicationWorkflow 컬렉션을 열심히로드합니다. 그러나 더 깊은 곳인 으로 이동하여 각 ApplicationWorkflow의 ApplicationStatus 개체를로드하고 싶습니다. 나는 다음과 같은 HQL 사용하여이 작업을 수행 할 수 하지만 기준에 번역 하시겠습니까 :
var workflowQuery = "SELECT DISTINCT app" +
" FROM Application app" +
" JOIN FETCH app.ApplicationWorkflows awf" +
" JOIN FETCH awf.ApplicationStatus";
나는 다음을 사용하는 것이 좋습니다 봤는데,하지만 모든 경우에 작업 그것으로 문제가 오전 :
.SetFetchMode<Core.Domain.Application>(app => app.ApplicationWorkflows[0].ApplicationStatus, FetchMode.Join)
을
HQL은 작동합니까? 나는 과거에 비슷한 것을 시도했고 중복에 문제가있었습니다. 'DistinctRootEntity'는 재귀 join-fetches를 할 때 예상했던 것을하지 않았습니다. –
음, 생각했습니다. 확인하겠습니다. 머리를 주셔서 감사합니다! –
[이 답변] (http://stackoverflow.com/questions/5266180/fighting-cartesian-product-x-join-when-using-nhibernate-3-0-0/5285739#5285739) 사용 방법을 알게되었습니다. QueryOver 및 Future 쿼리를 사용하여 중복을 반환하지 않고 자식 및 손자를 열심히 가져옵니다. 이 기술은 데이터베이스에 대해 한 번의 왕복으로 실행되는 별도의 SQL 쿼리로 작업을 나누는 작업을 포함합니다. –