Hi Colin,

I don't suppose you ever resolved this one?  We're hitting it in our NHB 
code having migrated our project to single instance.

James

On Friday, 10 September 2010 11:42:21 UTC-4, Colin Bowern wrote:
>
> I've done some more digging and found that in case 2 the 
> NHibernate.Loader.Loader.GetRow method has a copy of the object and 
> follows this path which is why it doesn't report three objects being 
> hydrated: 
>
>     //If the object is already loaded, return the loaded one 
>     obj = session.GetEntityUsingInterceptor(key); 
>     if (obj != null) 
>     { 
>         //its already loaded so dont need to hydrate it 
>         InstanceAlreadyLoaded(rs, i, persisters[i], key, obj, 
> lockModes[i], session); 
>
> It appears to not hydrate it because the object was retrieved as part 
> of an earlier call which is correct.  The question is why does it try 
> to do another question to retrieve the object when it already has it? 
> Digging back into the issues I see NH-1001 which somewhat describes 
> the situation - JOIN on a many-to-one which returns the object, yet 
> the loader goes out to try and retrieve it again.  I'm bitten a second 
> time by the fact that filters are not applied to that SELECT statement 
> (if they were, then I wouldn't have an issue per 
>
> http://groups.google.com/group/nhusers/browse_thread/thread/3852b75d3e984169).
>  
>
>
> Am I too far into thet weeds here?  How do I get the loader to not do 
> that second SELECT statement and just use the object it already found? 
>
> Thanks, 
> Colin 
>
> On Sep 9, 5:36 pm, Colin Bowern <co...@bowern.com> wrote: 
> > Is there any way to logging to turn up for troubleshooting why an 
> > object wouldn't have been hydrated?  Making the exact same call at two 
> > different points is yielding different results in terms of object 
> > hydration: 
> > 
> > Call 1 – Able to hydrate a bar object when opening an foo 
> > 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 46 -> [0] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 65535 -> [1] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 46 -> [2] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 46 -> [3] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.StringType) Foo 2009 -> [4] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.StringType) 555123 -> [5] 
> > NHibernate.Loader.Loader - SELECT this_.Id as Id12_2_, this_.ClientId 
> > as ClientId12_2_, this_.ScheduleId as ScheduleId12_2_, this_.barId as 
> > barId12_2_, schedule1_.Id as Id13_0_, schedule1_.ClientId as 
> > ClientId13_0_, schedule1_.Name as Name13_0_, bar2_.Resource_Id as 
> > Resource1_4_1_, bar2_.Client_Id as Client7_4_1_, bar2_.User_Id as 
> > User8_4_1_, bar2_.bar_Id as bar9_4_1_, bar2_.bar_Name as bar10_4_1_, 
> > FROM foos this_ inner join fooSchedules schedule1_ on 
> > this_.ScheduleId=schedule1_.Id inner join VSec_User_bar_Info bar2_ on 
> > this_.barId=bar2_.bar_Id and (bar2_.Client_Id = :p0 OR bar2_.Client_Id 
> > IS NULL) and bar2_.User_Id = :p1 WHERE (schedule1_.ClientId = :p2 OR 
> > schedule1_.ClientId IS NULL) and (this_.ClientId = :p3 OR 
> > this_.ClientId IS NULL) AND schedule1_.Name = :p4 and bar2_.bar_Id 
> > = :p5 
> > NHibernate.Loader.Loader - processing result set 
> > NHibernate.Loader.Loader - result set row: 0 
> > NHibernate.Loader.Loader - result row: 
> > EntityKey[Core.Domain.fooSchedule#2390744], 
> > EntityKey[Core.Domain.bar#18641357], 
> > EntityKey[Core.Domain.foo#3217256] 
> > NHibernate.Loader.Loader - Initializing object from DataReader: 
> > [Core.Domain.fooSchedule#2390744] 
> > NHibernate.Loader.Loader - Initializing object from DataReader: 
> > [Core.Domain.bar#18641357] 
> > NHibernate.Loader.Loader - Initializing object from DataReader: 
> > [Core.Domain.foo#3217256] 
> > NHibernate.Loader.Loader - done processing result set (1 rows) 
> > NHibernate.Loader.Loader - total objects hydrated: 3 
> > 
> > Call 2 – Not able to hydrate a bar object when copying a bar item 
> > which opens an foo 
> > 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 5 -> [0] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 65535 -> [1] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 5 -> [2] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.Int64Type) 5 -> [3] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.StringType) Foo 2010 -> [4] 
> > NHibernate.Engine.QueryParameters - 
> > BindParameters(Named:NHibernate.Type.StringType) 333222 -> [5] 
> > NHibernate.Loader.Loader - SELECT this_.Id as Id12_2_, this_.ClientId 
> > as ClientId12_2_, this_.ScheduleId as ScheduleId12_2_, this_.barId as 
> > barId12_2_, schedule1_.Id as Id13_0_, schedule1_.ClientId as 
> > ClientId13_0_, schedule1_.Name as Name13_0_, bar2_.Resource_Id as 
> > Resource1_4_1_, bar2_.Client_Id as Client7_4_1_, bar2_.User_Id as 
> > User8_4_1_, bar2_.bar_Id as bar9_4_1_, bar2_.bar_Name as bar10_4_1_, 
> > FROM foos this_ inner join fooSchedules schedule1_ on 
> > this_.ScheduleId=schedule1_.Id inner join VSec_User_bar_Info bar2_ on 
> > this_.barId=bar2_.bar_Id and (bar2_.Client_Id = :p0 OR bar2_.Client_Id 
> > IS NULL) and bar2_.User_Id = :p1 WHERE (schedule1_.ClientId = :p2 OR 
> > schedule1_.ClientId IS NULL) and (this_.ClientId = :p3 OR 
> > this_.ClientId IS NULL) AND schedule1_.Name = :p4 and bar2_.bar_Id 
> > = :p5 
> > NHibernate.Loader.Loader - processing result set 
> > NHibernate.Loader.Loader - result set row: 0 
> > NHibernate.Loader.Loader - result row: 
> > EntityKey[Core.Domain.fooSchedule#2929992], 
> > EntityKey[Core.Domain.bar#470090], EntityKey[Core.Domain.foo#3211664] 
> > NHibernate.Loader.Loader - Initializing object from DataReader: 
> > [Core.Domain.fooSchedule#2929992] 
> > NHibernate.Loader.Loader - Initializing object from DataReader: 
> > [Core.Domain.foo#3211664] 
> > NHibernate.Loader.Loader - done processing result set (1 rows) 
> > NHibernate.Loader.Loader - total objects hydrated: 2 
> > 
> > The first call correctly hydrates 3 objects, while the second call 
> > hydrates only 2.  Looking at the returned data I can't figure out why 
> > the second call won't hydrate Bar.

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhusers+unsubscr...@googlegroups.com.
To post to this group, send email to nhusers@googlegroups.com.
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to