In this case yes, because References/many-to-one isn't a collection; NHibernate needs the properties to be virtual so it can create a proxy to detect when something tries to access the referenced object, at which point it can go fetch the actual data.
On Mon, Jan 26, 2009 at 5:25 PM, <android...@gmail.com> wrote: > > So it's not possible to only lazy load associations/collections, the > entire class has to be marked lazy load with every property set to > virtual? > > On Jan 26, 12:07 pm, James Gregory <jagregory....@gmail.com> wrote: > > I don't think this is an issue, you just have to set lazy on the class; > > that's just how it's done. If you don't set lazy on the class, NHibernate > > has no way of lazy loading it as it won't know how to create the proxy. > > > > On Mon, Jan 26, 2009 at 4:54 PM, VisualHint <cadil...@gmail.com> wrote: > > > > > And anyway, my first issue persists. I was able to reset default-lazy > > > to false by using conventions. I don't put LazyLoad() on my class map > > > and set it to my association only. I used WriteMappingsTo wo check > > > that no lazy attribute is defined on the class and lazy="proxy" is > > > defined on my association. With all that, my association is still > > > eager loaded. > > > > > So would it be a NH issue instead of a FNH one ? > > > > > N. > > > > > On Jan 26, 10:57 am, VisualHint <cadil...@gmail.com> wrote: > > > > I understand a bit better now but note that: > > > > > > 1. When I generate the hbm from FNH and both LazyLoad and > > > > NotLazyLoaded are not set on the class, then no lazy attribute is > > > > added to the hbm file which maybe contradicts what you say ("Fluent > > > > NHibernate always sets something") > > > > > > 2. If your explanation is right, LazyLoad() on the association is > > > > absolutely of no use. > > > > > > N. > > > > > > On Jan 26, 10:23 am, James Gregory <jagregory....@gmail.com> wrote: > > > > > > > That sounds correct to me. Whatever gets set on the class takes > > > precedence > > > > > over what you set in the relationship. > > > > > HBM allowed you to not set anything for lazy load, while Fluent > > > NHibernate > > > > > always sets something; there's no way not to specify a value. So > the > > > lazy on > > > > > the relationship is used when the entity doesn't have any kind of > lazy > > > > > setting, but if it does then it overrides whatever is set on the > > > > > relationship; because FNH always sets a lazy value, it always > overrides > > > the > > > > > relationship. > > > > > > > No bug here as far as I can tell, but the lazy on the references > method > > > is > > > > > perhaps redundant. > > > > > > > On Mon, Jan 26, 2009 at 3:16 PM, VisualHint <cadil...@gmail.com> > > > wrote: > > > > > > > > ok, so now that the default is lazy=true, I added NotLazyLoaded > to my > > > > > > classmap. I set LazyLoad on my association only and again it is > not > > > > > > lazy loaded. > > > > > > If however, I remove NotLazyLoaded, then the default takes > precedence > > > > > > and with or without LazyLoad on my association, it is lazy > loaded. > > > > > > So I suspect something is wrong in the first case. The fault to > NH > > > > > > maybe (I'm with 2.1.0.1001). > > > > > > > > N. > > > > > > > > On Jan 26, 10:09 am, James Gregory <jagregory....@gmail.com> > wrote: > > > > > > > How are you getting your fluent mappings into nhibernate? > > > default-lazy > > > > > > > should definitely be true if you're running on the latest > trunk. > > > > > > > > > On Mon, Jan 26, 2009 at 2:54 PM, VisualHint < > cadil...@gmail.com> > > > wrote: > > > > > > > > > > If I call System.Xml.XmlDocument doc = CreateMapping(new > > > > > > > > FluentNHibernate.MappingVisitor()); > > > > > > > > > > I get an hbm that has default-lazy=false and I can assure you > > > that I > > > > > > > > got the latest FNH from the trunk, rebuilt it and referenced > it. > > > The > > > > > > > > various lazy settings are correctly added in the xml file for > the > > > 2 > > > > > > > > versions of LazyLoad() methods. > > > > > > > > I don't touch to the conventions. > > > > > > > > Configuration is done through the hibernate.cfg.xml and it > > > contains > > > > > > > > only the minimum: > > > > > > > > > > <?xml version="1.0" encoding="utf-8" ?> > > > > > > > > <hibernate-configuration > > > xmlns="urn:nhibernate-configuration-2.2"> > > > > > > > > <session-factory> > > > > > > > > <property name="connection.connection_string">Server=. > > > > > > > > \SQLEXPRESS;Database=mydb;Integrated > Security=True;</property> > > > > > > > > <property > name="dialect">NHibernate.Dialect.MsSql2005Dialect</ > > > > > > > > property> > > > > > > > > <property > > > > > > name="connection.provider">NHibernate.Connection.DriverConnectionProvider</ > > > > > > > > property> > > > > > > > > <property > > > > > name="connection.driver_class">NHibernate.Driver.SqlClientDriver</ > > > > > > > > property> > > > > > > > > <property name="connection.release_mode">auto</property> > > > > > > > > <property name="adonet.batch_size">500</property> > > > > > > > > > > <property name="show_sql">true</property> > > > > > > > > <property name="generate_statistics">true</property> > > > > > > > > > > </session-factory> > > > > > > > > </hibernate-configuration> > > > > > > > > > > On Jan 26, 9:45 am, James Gregory <jagregory....@gmail.com> > > > wrote: > > > > > > > > > By default the "default-lazy" attribute is set to true on > every > > > > > > mapping > > > > > > > > > created by Fluent NHibernate, so unless you've overridden > this > > > using > > > > > > the > > > > > > > > > conventions, that's what's getting set. As far as I > understand, > > > this > > > > > > > > infers > > > > > > > > > the class level setting. > > > > > > > > > How are you configuring your session factory? Could you > write > > > out > > > > > > your > > > > > > > > > mappings using the WriteMappingsTo method of the > > > PersistenceModel, > > > > > > then > > > > > > > > we > > > > > > > > > can see what's actually being generated. > > > > > > > > > > > On Mon, Jan 26, 2009 at 1:58 PM, VisualHint < > > > cadil...@gmail.com> > > > > > > wrote: > > > > > > > > > > > > I use the latest FNH and it still doesn't work. I have to > > > > > > explicitely > > > > > > > > > > set LazyLoad on the classmap to get this behavior. > > > > > > > > > > I understand the difference between the 2 lazyload > methods > > > but I > > > > > > don't > > > > > > > > > > understand when you say: > > > > > > > > > > > > > however, the class gets precedence, so if your class > isn't > > > set > > > > > > > > > > > to lazy load (which was the default) then the > references > > > call > > > > > > won't > > > > > > > > have > > > > > > > > > > any > > > > > > > > > > > effect. > > > > > > > > > > > > Logically, if the entity is not forced to LazLoad then > > > calling it > > > > > > or > > > > > > > > > > not on the association WOULD MAKE a difference. > > > > > > > > > > If you force it on the classmap then calling LazyLoad on > the > > > > > > > > > > association would not change anything. If a NotLazyLoaded > was > > > > > > possible > > > > > > > > > > on the association, then this one would make a > difference. > > > No? > > > > > > > > > > > > About trying with hbm, unfortunately, I tried to learn > FNH > > > before > > > > > > HBM > > > > > > > > > > so this is not something I can immediately try. > > > > > > > > > > > > N. > > > > > > > > > > > > On Jan 26, 7:14 am, James Gregory < > jagregory....@gmail.com> > > > wrote: > > > > > > > > > > > @Nicolas: How old is your copy of Fluent NHibernate? > > > Originally > > > > > > it > > > > > > > > was > > > > > > > > > > the > > > > > > > > > > > default that all entities would be not lazy loaded; so > if > > > your > > > > > > copy > > > > > > > > is > > > > > > > > > > from > > > > > > > > > > > then, you won't see the lazy load behaviour. > > > > > > > > > > > The two different lazy load methods you spoke of do > > > different > > > > > > things, > > > > > > > > the > > > > > > > > > > > lazy load on the class sets it at the entity level, so > > > whenever > > > > > > that > > > > > > > > > > entity > > > > > > > > > > > is referenced anywhere it's lazy loaded, the other sets > it > > > for > > > > > > that > > > > > > > > > > specific > > > > > > > > > > > relationship; however, the class gets precedence, so if > > > your > > > > > > class > > > > > > > > isn't > > > > > > > > > > set > > > > > > > > > > > to lazy load (which was the default) then the > references > > > call > > > > > > won't > > > > > > > > have > > > > > > > > > > any > > > > > > > > > > > effect. > > > > > > > > > > > > > As Seb said, the reason the class lazy load requires > > > virtual > > > > > > methods > > > > > > > > is > > > > > > > > > > > because it creates a proxy of the entity. If your > methods > > > aren't > > > > > > > > already > > > > > > > > > > > virtual, then your lazy loading won't be working > because > > > > > > NHibernate > > > > > > > > won't > > > > > > > > > > > know how to track it. > > > > > > > > > > > > > So what do you need to do? Update your copy of FNH and > try > > > again, > > > > > > > > failing > > > > > > > > > > > that, explicitly set lazy loading in your class and use > > > virtuals; > > > > > > > > that's > > > > > > > > > > the > > > > > > > > > > > recommended approach. > > > > > > > > > > > > > Please note, this isn't a Fluent NHibernate specific > issue, > > > you'd > > > > > > be > > > > > > > > > > seeing > > > > > > > > > > > the same behaviour for standard xml mapping too. > > > > > > > > > > > > > On Mon, Jan 26, 2009 at 8:57 AM, Paul Batum < > > > > > > paul.ba...@gmail.com> > > > > > > > > > > wrote: > > > > > > > > > > > > When it comes to issues such as this I am somewhat of > a > > > broken > > > > > > > > record - > > > > > > > > > > my > > > > > > > > > > > > suggestion is always the same: > > > > > > > > > > > > > > See if you can get the desired behavior using HBM > xml. > > > Once you > > > > > > > > have > > > > > > > > > > > > working xml, we can compare it to what fluent > nhibernate > > > is > > > > > > > > generating > > > > > > > > > > and > > > > > > > > > > > > see where the problem lies. > > > > > > > > > > > > > > Paul Batum > > > > > > > > > > > > > > On Mon, Jan 26, 2009 at 9:16 AM, Chris Marisic < > > > > > > ch...@marisic.com> > > > > > > > > > > wrote: > > > > > > > > > > > > > >> I noticed this also but I assumed I was handling the > > > session > > > > > > > > > > > >> incorrectly making it fully load the object but > maybe > > > this > > > > > > > > actually is > > > > > > > > > > > >> an issue. > > > > > > > > > > > > > >> On Jan 25, 9:20 am, VisualHint <cadil...@gmail.com> > > > wrote: > > > > > > > > > > > >> > Yes I know that Seb (thx anyway). This was just > > > telling a > > > > > > fact. > > > > > > > > > > > >> > My question is about LazyLoad and why it has no > effect > > > when > > > > > > > > called > > > > > > > > > > on > > > > > > > > > > > >> > a References() call. > > > > > > > > > > > > > >> > Nicolas > > > > > > > > > > > > > >> > On Jan 25, 3:44 am, Sebastien Lambla < > > > s...@serialseb.com> > > > > > > > > wrote: > > > > > > > > > > > > > >> > > > But > > > > ... > > > > read more ยป > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to fluent-nhibernate@googlegroups.com To unsubscribe from this group, send email to fluent-nhibernate+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---