the problem isn't NH the problem is how you have configured NH. design time settings are applied first, then run time settings are applied. you have also configured your Details to be eagerly loaded. therefore when you select Master, Details will be selected using an outer-join and the records will be sorted by date, then any other properties you choose.
I would remove the ordering and lazy loading from the mapping and apply this to the query at runtime. you can reduce the duplication by using either a named query or subclassing DetachedCriteria. "When I fetch masters, I want the details to come along with them eagerly. ... I'm very tempted to throw in a "duh!" here and rant about the perversity of NHibernate's need to fetch masters and details in a single join query, but I will resist." eager loading means an outer join lazy is additional selects. On May 10, 11:52 am, Brian Berns <[email protected]> wrote: > I have two entities called Master and Detail. When I fetch masters, I > want the details to come along with them eagerly. This is a perfect > case for DistinctRootEntityResultTransformer. > > The details are always sorted by datetime, so I mark this on the > association in the mapping file: > > <bag name="Details" order-by="Date" lazy="false"> > <key column="MasterFK"/> > <one-to-many class="Detail"/> > </bag> > > When I fetch the masters, I want to sort them by name, so I specify > this when creating the criteria: > > session.CreateCriteria<Master>() > .SetFetchMode("Details", FetchMode.Join) > .SetResultTransformer(new > DistinctRootEntityResultTransformer()); > .AddOrder(Order.Asc("Name")) > .List<Master>(); > > The problem with this is that the results come back sorted first by > Detail.Date, then secondly by Master.Name. Here's the SQL: > > ORDER BY details2_.Date, this_1_.Name asc > > This is clearly not what I want. (I'm very tempted to throw in a > "duh!" here and rant about the perversity of NHibernate's need to > fetch masters and details in a single join query, but I will resist. > I... will... resist...) > > So, how do I tell NHibernate to sort the masters before sorting the > details? > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group > athttp://groups.google.com/group/nhusers?hl=en. -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
