Hello Lon;

Unfortunately my current work does not use Cayenne so I am thinking back
a wee bit, but I think you might be able to do what you want by using
EJBQL.  Look for "Similar Behaviours Using EJBQL" here;

http://cayenne.apache.org/docs/4.0/cayenne-guide/performance-tuning.html#prefetching

Regards;

-- 
Andrew Lindesay
www.silvereye.co.nz

On Wed, 5 Oct 2016, at 05:02, Lon Varscsak wrote:
> Hmmm…but I guess there wouldn’t be another way to do it unless you knew
> the
> original query.
> 
> On Tue, Oct 4, 2016 at 8:59 AM, Lon Varscsak <[email protected]>
> wrote:
> 
> > So, I finally got back around to this (still no solution).  What you’re
> > describing isn’t really what I’m after.  What I’d like to do is take an
> > object (or array of objects) and a list of keys and have Cayenne basically
> > do the same fetching it does with it’s pre-fetching code.
> >
> > So when I use addPrefetch to a query, by default it will execute a fetch
> > for each of the relationships.  This allows me to decide at the application
> > level what keys are important to me.  So something like this:
> >
> > CayenneUtilities.batchFetch(myDataObjects, “toOne”, “toMany”). It would
> > execute a query to find all the objects in “toOne” for all the objects in
> > myDataObjects (and the same for “toMany”).  Based on seeing how Cayenne
> > executes the prefetch queries (at least with UNDEFINED_SEMANTICS), I bet it
> > would be pretty straight forward.  But I haven’t looked at the code enough
> > and it might be above my pay grade. ;)
> >
> > The downside (I think) with the way WOnder implemented it is it just uses
> > primary keys to find the objects (lots of ORs), so depending on your
> > database you had to also specify the number of myDataObjects to process at
> > once.
> >
> > -Lon
> >
> > On Tue, Jul 5, 2016 at 11:07 PM, Andrus Adamchik <[email protected]>
> > wrote:
> >
> >> IIRC in EOF this was "probabilistic", with framework trying to guess
> >> which other objects' relationships to include in batch fetch. So we'd also
> >> need to track some kind of "affinity" of root objects between each other.
> >>
> >> The first step would be to patch Cayenne to make
> >> org.apache.cayenne.reflect.FaultFactory injectable (currently it is
> >> created inside EntityResolver). Then come up with a custom FaultFactory and
> >> an algorithm for tracking the affinity of faults between each other. And
> >> make sure it doesn't leak memory :)
> >>
> >> Andrus
> >>
> >>
> >> > On Jul 6, 2016, at 12:20 AM, Mike Kienenberger <[email protected]>
> >> wrote:
> >> >
> >> > That'd be something I'd get some use out of as well.
> >> >
> >> > On Tue, Jul 5, 2016 at 5:19 PM, Lon Varscsak <[email protected]>
> >> wrote:
> >> >> I know I’ve asked this before, but I need a batch fetch utility class,
> >> to
> >> >> trigger batch fetching of relationships.  I know pre-fetching will do
> >> this,
> >> >> but usually when I need it is after the fetch (and I don’t want to
> >> always
> >> >> do it even when it’s not needed).
> >> >>
> >> >> Anyone have any pointers on how to go about implementing this?
> >> >>
> >> >> -Lon
> >>
> >>
> >

Reply via email to