ONE QUERY PER COLLECTION, not ONE QUERY PER COLLECTION PER RECORD.
If you have one filtered query with two collections, that's 3 queries TOTAL,
regardless of the record count.
Future allows you to reduce the roundtrips (the number of queries is still
the same), but you can't combine the first query and the others if you're
paging.
You can still use it for queries other than the first, which brings the
roundtrip count to 2 regardless of how many collections or records you are
loading.
Diego
On Sat, Aug 28, 2010 at 04:55, Niclas Pehrsson <[email protected]> wrote:
> Well that means a lot of queries if MaxSize is 200.
> But maybe it is the only way to do it.
>
> Are there any example of this scenario with Criterion?
> I guess the use of Future is needed, you want to get the root entity
> loaded with its collections as result.
>
> On Aug 27, 8:08 pm, Diego Mijelshon <[email protected]> wrote:
> > The answer is right there: "two totally separate queries, first to get
> just
> > the entities, then to load the related associations"
> >
> > First, one paged query without fetching the collections, then one query
> per
> > collection, filtering with the Ids of the first query.
> >
> > Diego
> >
> > On Fri, Aug 27, 2010 at 09:49, Niclas Pehrsson <[email protected]>
> wrote:
> > > Well it wont work :(
> >
> > > Ayende repsonded to an comment with this
> > > "SetMaxResults, but that might cause issues with the loading.
> > > At that point, I might want to execute two totally separate queries,
> > > first to get just the entities, then to load the related associations.
> > > "
> >
> > > So how can I solve this?
> > > Its a bit annoying, I want to load 200 hundred of thousands, and I
> > > want to avoid 200+200 select queries.
> > > Any other approaches?
> >
> > > On Aug 26, 3:03 pm, Diego Mijelshon <[email protected]> wrote:
> > > > SetMaxResults and SetFetchMode on _collections_ don't get along.
> >
> > > > Suggested read:
> > >http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-asso.
> ..
> >
> > > > Diego
> >
> > > > On Thu, Aug 26, 2010 at 04:50, Niclas Pehrsson <[email protected]>
> > > wrote:
> > > > > Hi I have an query that looks like this.
> >
> > > > > Return (From receipt In _session.Linq(Of
> > > > > PointOfSale.Receipt)() _
> > > > > Where receipt.IsClosed AndAlso Not
> > > > > receipt.IsSynchronized _
> > > > > Select receipt).Take(25).ToList()
> >
> > > > > Or
> > > > > Dim criterion = _session.CreateCriteria(Of Receipt)
> > > > > ().SetMazSize(25).Add(Expression.Eq("IsClosed", True)) _
> > > > > .Add(Expression.Eq("IsSynchronized", False)) _
> > > > > .SetFetchMode("Payments", FetchMode.Eager) _
> > > > > .SetFetchMode("ReceiptEntry", FetchMode.Eager)
> >
> > > > > 'Return criterion.List(Of PointOfSale.Receipt)()
> >
> > > > > Both of them first asks the database för the first query options
> > > > > IsClosed and Not IsSynchronized, and then It creates an select N+1
> for
> > > > > each element. How can I do this better so it will be just one or
> three
> > > > > queries that selects top 25 entities?
> >
> > > > > --
> > > > > 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]>
> <nhusers%[email protected]<nhusers%[email protected]>
> >
> > > <nhusers%[email protected]<nhusers%[email protected]>
> <nhusers%[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]<nhusers%[email protected]>
> <nhusers%[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]<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.