Additional query happen when there is not a relation ?for example when B.C is null.
2009/3/18 Fred F. <[email protected]> > > Hi Fabio, > > thanks for your reply. > > > Remove all specification about "lazy" and "fetch" from your mappings.For > who > > are new in NH the best way is : > > -write your mapping specifying less as possible; string length when is > > different than 255, scale+precision for double, after that write only > what > > is required. > > Ok, but well... I started with less as possible. Afterwards I added > the different options for lazy loading. > > > -study how work with eager loading trough HQL and/or CriteriaAPI > > I think I did. I know, that I don't want to load in eager mode, as I > don't need the additional loaded Informations. I'm using the > CriteriaAPI. > > > When your app is working: > > Go to reference and study "Improving performance" > > I think I did. I've learned a lot about fetching strategies and > created the ideal sql statement via the criteriaAPI. But I can't find > anything about my basic problem: > Why is it fetching some data from the many-to-one references directly > after executing my 'ideal' statement? Is this standard behaviour? Can > I prevent him loading the other data, as I don't need this data right > now? > > > Take a look to this mapping > > > > <class name="OrdenDeCompra"> > > <id name="Id"> > > <generator class="hilo"/> > > </id> > > <many-to-one name="EmpresaCompra"/> > > <many-to-one name="OrganizacionCompra"/> > > <property name="Comentarios"/> > > > > <property name="Numero" length="35"/> > > <property name="Nombre" length="50"/> > > <property name="Usuario" length="30"/> > > <property name="FechaCreacion"/> > > <property name="FechaEnvio"/> > > <property name="FechaPublicacion"/> > > <property name="Estado"/> > > <many-to-one name="Moneda"/> > > <many-to-one name="MetodoDespacho"/> > > <many-to-one name="FormaPago"/> > > <many-to-one name="RazonSocial"/> > > <many-to-one name="EmpresaVenta"/> > > <many-to-one name="OrganizacionVenta"/> > > <list name="Lineas" access="field.camelcase" cascade="all" > inverse="true"> > > <key column="IDOC" on-delete="cascade"/> > > <list-index column="NUMLINEAOC"/> > > <one-to-many class="OrdenDeCompraLinea"/> > > </list> > > </class> > > Thanks for your help. > > I've got something like this > > [...] > <many-to-one name="ext" class="MyAssembly.Ext, MyAssembly"> > <column name="person" /> > <column name="type" /> > </many-to-one> > [...] > > > heavy to write no ? ;) > > Obviously not. But I still don't understand why nhibernate does > something like this: > > <EditedLogfile> > > 2009-03-18 14:44:19,664 [11] INFO NHibernate.Loader.Loader - SELECT > [...] FROM myDB.workertype this_ > left outer join myDB.contract contract2_ on this_.ID=contract2_.BV and > this_.CLASS=contract2_.BVTYP > left outer join myDB.company company3_ on > contract2_.PARTNER=company3_.ID and > contract2_.PARTNERTYP=company3_.CLASS > inner join myDB.Department dep1_ on this_.ID=dep1_.BV and > this_.CLASS=dep1_.BVTYP > WHERE ( this_.CLASSID='external') AND LOWER(name) LIKE '%smith%' and > department = 42 > > <pause> > This would be enough. This statement is perfectly alright. But the > workertype-class has got some other many-to-one associations and loads > them like the following... for each record of my query above! :( > </pause> > > 2009-03-18 14:44:21,410 [11] INFO NHibernate.Loader.Loader - SELECT > [...] FROM myDB.workertype work0_ WHERE work0_.ID=:p0 and > work0_.CLASS=:p1 > > 2009-03-18 14:44:26,023 [11] INFO NHibernate.Loader.Loader - SELECT > [...] FROM myDB.Person p0_ > left outer join myDB.Image img1_ on p0_.ID=img1_.ID and > p0_.CLASS=img1_.CLASS > left outer join myDB.Person person2_ on img1_.ID=person2_.ID and > img1_.CLASS=person2_.CLASS > WHERE p0_.ID=:p0 and p0.CLASS=:p1 and ( p0_.CLASSID='worker') > > 2009-03-18 14:44:26,070 [11] INFO NHibernate.Loader.Loader - SELECT > [...] FROM myDB.Person worker0_ > left outer join myDB.Image img1_ on worker0_.ID=img1_.ID and > worker0_.CLASS=img1_.CLASS > left outer join myDB.Person person2_ on img1_.ID=person2_.ID and > img1_.CLASS=person2_.CLASS > WHERE worker_.ID=:p0 and worker0_.CLASS=:p1 and > ( worker0_.CLASSID='worker') > > 2009-03-18 14:44:26,662 [11] INFO NHibernate.Loader.Loader - SELECT > [..] FROM myDB.Person person0_ > left outer join myDB.Image img1_ on person0_.ID=img1_.ID and > person0_.CLASS=img1_.CLASS > left outer join myDB.Person person2_ on img1_.ID=person2_.ID and > img1_.CLASS=person2_.CLASS > WHERE person0_.ID=:p0 and person0_.CLASS=:p1 > > 2009-03-18 14:44:27,426 [11] INFO NHibernate.Loader.Loader - SELECT > [...] FROM myDB.Person ext0_ > left outer join myDB.Image img1_ on ext0_.ID=img1_.ID and > ext0_.CLASS=img1_.CLASS > left outer join myDB.Person person2_ on img1_.ID=person2_.ID and > img1_.CLASS=person2_.CLASS > WHERE ext0_.ID=:p0 and ext0_.CLASS=:p1 and > ( ext0_.CLASSID='external') > > </EditedLogfile> > > Thanks in advance. Still looking for explanations. > > > > 2009/3/18 Fred F. <[email protected]> > > > > > > > > > > > > > > > > > Hi folks! > > > > > I'm using NHibernate v2.0.50727 and I'm quite uncertain about many-to- > > > one and lazy loading, although I've read several blogs about this > > > topic. > > > > > I've got following scenario: > > > > > Class A has a one-to-many relation to class B (bag collection) and B > > > has got a many-to-one relation to class C. Class A an B do have some > > > other many-to-one relations to other classes (lets say Relation R1 and > > > Relation R2) which are not important for my query. > > > > > Class A (1)--->(n) Class B (n) ---> (1) Class C > > > > > Default is lazy=true, but I'm creating my criteria with an left outer > > > join to the classes, so I only need one query for this case. I can see > > > the correct query in my logs. This query returns a collection of > > > records. I can test this query in my sql-client and everything is > > > fine. So far so good. > > > > > But: > > > > > For _each_ of my records nhibernate sends additional queries to the > > > database. And it seems that it queries for the related objects which > > > are related to class A and B by many-to-one relations (Relation R1 and > > > R2). This additional references are completely unnecessary in this > > > case and they are not used in this part of the application. > > > > > My question: > > > > > Why is nhibernate quering for these additional objects although nobody > > > uses them? I've tried several different options in my many-to-one > > > relations like > > > > > outer-join="false" > > > lazy="proxy" (I suppose I'm not aware of the effect) > > > fetch="select"/fetch="join" > > > > > I've added lazy="false" to all classes. > > > > > How can I prevent nhibernate to load these not needed objects? It has > > > quite an impact on my performance level. > > > > > Thanks in advance! > > > Fred F. > > > > -- > > Fabio Maulo- Zitierten Text ausblenden - > > > > - Zitierten Text anzeigen - > > > -- Fabio Maulo --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
