My entity "TimeRecord" has a collection of "WayPoints" and two one-to-one properties "Location" and "WayData".
Each property can be null.
I need to export all Time Records with initialized properties for a specific User.
I actually had a working solution but then I started to use NHibernateProiler and first I noticed that this code results in a ridiculous number of query’s against db.
var query = (from timeRecord in Session.Query<TimeRecord>()
                .Where(tr => tr.User.Id == userid)
            select timeRecord);
Then I changed my code to:
var query = (from post in Session.Query<TimeRecord>()
                .Fetch(x => x.Location)
                .Fetch(x => x.WayData)
                .FetchMany(x => x.WayPoints)
                .Where(tr => tr.User.Id == userid)
            select post);
Which lead me to the Cartesian product problem.
Right now I’m experimenting with this piece of code:
 var sql1 = "from TimeRecord b left outer join fetch b.Location where b.User.Id=:User_id";
 var sql2 = "from TimeRecord b left outer join fetch b.WayData where b.User.Id=:User_id";
 var sql3 = "from TimeRecord b left inner join fetch b.WayPoints where b.User.Id=:User_id";
var result = Session.CreateMultiQuery()
             .Add(Session.CreateQuery(sql1))
             .Add(Session.CreateQuery(sql2))
             .Add(Session.CreateQuery(sql3))
             .SetParameter("User_id", userid)
             .List();
But I can’t say if this is the correct approach or if this is even possible with nHibernate. Can someone help me with that?