NHibernate version: 1.0.2.0
Database: SQL Server 2005
I have the following object relations:
AdoptionPlan 1-----*
Process 1-----*
Activity *-----*
Policy
The mapping document has all relations set to lazy="true". For a given adoption plan, I want to eagerly fetch all processes, all activities and all policies. I have tried this using HQL as well as criteria query, but with no luck.
Here's my attempt using HQL:
Code:
string queryString =
"select adoptionPlan from AdoptionTool.Domain.AdoptionPlanImpl as adoptionPlan " +
"left join fetch adoptionPlan.Processes as process " +
"left join fetch process.Activities as activity " +
"left join fetch activity.Policies as policy " +
"where adoptionPlan.Id = :apID";
IQuery queryObject = Session.CreateQuery(queryString);
queryObject.SetParameter("apID", planId);
AdoptionPlan adoptionPlan = (AdoptionPlan)queryObject.UniqueResult();
This code generates the following exception: "cannot fetch multiple collections in one query"
Here's a second attempt using criteria query:
Code:
ICriteria adoptionPlanCriteria = Session.CreateCriteria(typeof(AdoptionPlanImpl));
adoptionPlanCriteria.Add(Expression.Eq("Id", planId));
adoptionPlanCriteria.SetFetchMode("Processes", FetchMode.Join);
ICriteria processCriteria =
adoptionPlanCriteria.CreateCriteria("Processes")
.SetFetchMode("Activities", FetchMode.Join);
ICriteria activityCriteria =
processCriteria.CreateCriteria("Activities")
.SetFetchMode("Policies", FetchMode.Join);
AdoptionPlan adoptionPlan = (AdoptionTool.Domain.AdoptionPlan)adoptionPlanCriteria.UniqueResult();
Now this query does not throw an exception, but looking at the logs, it is obviously ignoring the FetchMode.Join. I can see many-many selects happening instead of one.
Can someone tell me if NHibernate supports eager joining of nested tables?
Thanks.
Naresh