I've not seen much documentation, i just played with it to see what it did. It really is very useful...
On Tue, Aug 24, 2010 at 5:12 PM, George Mauer <[email protected]> wrote: > Thanks for trying to help. Is there any documentation on what fetch > actually does? > > On Aug 24, 11:08 am, philw <[email protected]> wrote: > > Hi George > > > > When I use the fetch function it allows me to pull back an entire > > hierarchy in one sql call as it uses joins instead of separate sql > > calls. I'm not sure why your hieracrhy is creating so much sql. > > > > I think the best thing for you to do would be to play with the fetch > > statement, both in your mapping files and your Criteria statement. > > > > Phil > > > > On Aug 24, 4:59 pm, George Mauer <[email protected]> wrote: > > > > > > > > > Update: I tried the following: > > > > > public FolderHierarchyNode Get() > > > { > > > using (var s = _sessions.OpenSession()) > > > return s.CreateQuery("select n from > > > FolderHierarchyNode n join fetch n._children") > > > .SetResultTransformer(new > > > global::NHibernate.Transform.DistinctRootEntityResultTransformer()) > > > .List<FolderHierarchyNode>() > > > .Single(n => n.Parent.IsNull()); > > > } > > > > > This resulted in actually twice as many queries being issued. After > > > reading up on DistinctRootEntityResultTransformer, I don't see how it > > > can achieve my desired results since the problem I'm having is that I > > > get multiple queries, not that I get duplicate rows as a result of a > > > single query. > > > > > On Aug 24, 9:43 am, philw <[email protected]> wrote: > > > > > > Hi > > > > > > I think this might be of some help to you, ot was for me > > > > > > > http://ayende.com/Blog/archive/2009/08/28/nhibernate-tips-amp-tricks-... > > > > > > Phil > > > > > > On Aug 24, 3:38 pm, George Mauer <[email protected]> wrote: > > > > > > > I have the following simple domain model representing a hierarchy: > > > > > > > public class FolderHierarchyNode > > > > > { > > > > > public virtual Guid Id { get; private set; } > > > > > public virtual string Name { get; private set; } > > > > > public virtual FolderHierarchyNode Parent { get; set; } > > > > > ICollection<FolderHierarchyNode> _children = new > > > > > HashSet<FolderHierarchyNode>(); > > > > > public virtual IEnumerable<FolderHierarchyNode> Children { > get > > > > > { return _children; } } > > > > > public FolderHierarchyNode() { } > > > > > } > > > > > > > I only need to track children, not the level in the hierarchy which > I > > > > > should be able to do with this mapping: > > > > > > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > > > > > assembly="MyApp.Domain" namespace="MyApp.Domain.FolderHierarchy"> > > > > > <class name="FolderHierarchyNode" table="NODES"> > > > > > <id name="Id" column="PK_NODES" type="System.Guid" unsaved- > > > > > value="00000000-0000-0000-0000-000000000000"> > > > > > <generator class="guid" /> > > > > > </id> > > > > > <property name="Name" column="NDELNAME" /> > > > > > > > <many-to-one name="Parent" column="FK_NODES" > > > > > class="FolderHierarchyNode" not-null="true" /> > > > > > <set name="_children" access="field" > cascade="all-delete-orphan" > > > > > lazy="false"> > > > > > <key column="FK_NODES" /> > > > > > <one-to-many class="FolderHierarchyNode"/> > > > > > </set> > > > > > </class> > > > > > </hibernate-mapping> > > > > > > > I can then query for the parent node simply like this: > > > > > public FolderHierarchyNode Get() > > > > > { > > > > > using (var s = _sessions.OpenSession()) > > > > > return s.Linq<FolderHierarchyNode>() > > > > > .ToArray() > > > > > .Single(n => n.Parent.IsNull()); > > > > > } > > > > > > > This generates at first the following SQL: > > > > > SELECT > > > > > this_.PK_NODES as PK1_4_0_, this_.NDELNAME as NDELNAME4_0_, > > > > > this_.FK_NODES as FK3_4_0_ > > > > > FROM NODES this_ > > > > > > > The results of this query should already contain all the > information > > > > > necessary to build up the object tree but then I get a plethora > more > > > > > select statements (I assume to fetch the children of each node): > > > > > > > SELECT children0_.FK_NODES as FK3_1_, children0_.PK_NODES as > PK1_1_, > > > > > children0_.PK_NODES as PK1_4_0_, children0_.NDELNAME as > NDELNAME4_0_, > > > > > children0_.FK_NODES as FK3_4_0_ FROM NODES children0_ WHERE > > > > > children0_.fk_nod...@p0;@p0 = 106e707a-699c-4c7e-a625-f3add43c0aee > > > > > SELECT children0_.FK_NODES as FK3_1_, children0_.PK_NODES as > PK1_1_, > > > > > children0_.PK_NODES as PK1_4_0_, children0_.NDELNAME as > NDELNAME4_0_, > > > > > children0_.FK_NODES as FK3_4_0_ FROM NODES children0_ WHERE > > > > > children0_.fk_nod...@p0;@p0 = 89e18057-eabe-466f-b3e6-e1ce02c90bfd > > > > > .... > > > > > etc. > > > > > > > What's the best way to get rid of these un-necessary sql calls? My > > > > > best guess is that I can drop the children from the mapping and in > my > > > > > repository wire them up manually, but I'm hoping there's a more > > > > > integrated way to do this > > -- > 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]<nhusers%[email protected]> > . > For more options, visit this group at > http://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.
