cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Frank Herrmann <frank.herrm...@modernizingmedicine.com>
Subject Re: Caching Relationship Objects/Queries - Cayenne 3.1
Date Tue, 17 May 2016 19:24:34 GMT
Thanks. That is pretty much our issue. If I do a prefetch however on
object1 I everything works as expected. I'll have to dig deeper into our
code to see what is going on.

On Tue, May 17, 2016 at 2:48 PM, Michael Gentry <blacknext@gmail.com> wrote:

> Hi Frank,
>
> There might still be something more going on here.
>
> When you initially fetch object2 for the first time, the relationship to
> object1 is a "fault" (assuming you don't prefetch).  When you say
> object2.getObject1(), Cayenne will trigger the fault resulting in a SELECT
> statement sent to the DB, which gets populated into object1, which replaces
> the fault.  The next time you say object2.getObject1(), it should return
> object1 since the fault is no longer there.  I glossed over a few things
> there, but I hope you understood my gist.  I'm assuming something has
> happened to your object2 between the first and second calls to getObject1()
> which is causing the fault to be re-established and therefore re-tripped.
>
> mrg
>
>
>
> On Tue, May 17, 2016 at 2:29 PM, Frank Herrmann <
> frank.herrmann@modernizingmedicine.com> wrote:
>
> > I believe your first example. Here is some clarification.
> >
> > object2 = // something that fetches object2 -- object2 is now in the
> object
> > cache
> > object1 = object2.getObject1(); // makes a call to the database and
> fetches
> > object1 -- does not put object1 in the object cache
> > object1 = object2.getObject1(); // makes another call to the database to
> > fetch object1, since object1 is not in the object cache
> >
> > -Frank
> >
> > On Tue, May 17, 2016 at 2:21 PM, Michael Gentry <blacknext@gmail.com>
> > wrote:
> >
> > > Hi Frank,
> > >
> > > I'm a little confused by this part:
> > >
> > > "If we retrieve Object2 from the database, it is placed in the object
> > > cache. Afterwards, if we retrieve Object1 via the getter in Object2,
> > > Object1 is not cached. So, every time we make the request for Object1
> via
> > > the getter, another call is made to the database."
> > >
> > > Are you saying:
> > >
> > > object2 = // something that fetches object2
> > > object1 = object2.getObject1(); // trips fault, fetches object1
> > > object1 = object2.getObject1(); // trips fault, fetches object1
> > >
> > > Or:
> > >
> > > object2 = // something that fetches object2
> > > object1 = object2.getObject1(); // trips fault, fetches object1
> > > object2 = // refetch object2 from cache
> > > object1 = object2.getObject1(); // trips fault, fetches object1
> > >
> > > Thanks,
> > >
> > > mrg
> > >
> > >
> > > On Tue, May 17, 2016 at 9:32 AM, Frank Herrmann <
> > > frank.herrmann@modernizingmedicine.com> wrote:
> > >
> > > > Hello all,
> > > >
> > > > I have a question regarding how Cayenne does caching. Right now, if
> we
> > > > retrieve an object from the database via Cayenne, it is placed in the
> > > > object cache. However, in our experience, if we then retrieve another
> > > > object via the relationship on the first object, it is not cached.
> > > >
> > > > A rough example:
> > > >
> > > > public class Object1 {
> > > >     ... misc attributes ...
> > > > }
> > > >
> > > > public class Object2 {
> > > >     ... misc attributes...
> > > >     private Object1 object1;
> > > >
> > > >     public Object1 getObject1() {
> > > >         return object1;
> > > >     }
> > > > }
> > > >
> > > > If we retrieve Object2 from the database, it is placed in the object
> > > cache.
> > > > Afterwards, if we retrieve Object1 via the getter in Object2, Object1
> > is
> > > > not cached. So, every time we make the request for Object1 via the
> > > getter,
> > > > another call is made to the database. I have fixed this for
> individual
> > > > instances by using prefetches. However, our application is quite
> large,
> > > and
> > > > I don't like the idea of tracking down case.
> > > >
> > > > Is there some way for Cayenne to place the relationship objects into
> > the
> > > > object cache the first time they are retrieved? We are using EhCache
> > for
> > > > our query caching, so if the object cache is not an options, is
> there a
> > > way
> > > > to store these relationships in a short lived query cache?
> > > >
> > > > Thanks for the help.
> > > >
> > > > -Frank
> > > >
> > > > --
> > > > FRANK HERRMANN
> > > > SOFTWARE ENGINEER
> > > >
> > > > T: 561-880-2998 x1563
> > > >
> > > > E: frank.herrmann@modmed.com
> > > >
> > > >
> > > >
> > > > [image: [ Modernizing Medicine ]] <http://www.modmed.com/>
> > > > [image: [ Facebook ]] <http://www.facebook.com/modernizingmedicine>
> > > > [image:
> > > > [ LinkedIn ]] <http://www.linkedin.com/company/modernizing-medicine/
> >
> > > > [image:
> > > > [ YouTube ]] <http://www.youtube.com/user/modernizingmedicine>
> > [image: [
> > > > Twitter ]] <https://twitter.com/modmed_EMA> [image: [ Blog ]]
> > > > <http://www.modmed.com/BlogBeyondEMR> [image: [ Instagram ]]
> > > > <http://instagram.com/modernizing_medicine>
> > > >
> > >
> >
> >
> >
> > --
> > FRANK HERRMANN
> > SOFTWARE ENGINEER
> >
> > T: 561-880-2998 x1563
> >
> > E: frank.herrmann@modmed.com
> >
> >
> >
> > [image: [ Modernizing Medicine ]] <http://www.modmed.com/>
> > [image: [ Facebook ]] <http://www.facebook.com/modernizingmedicine>
> > [image:
> > [ LinkedIn ]] <http://www.linkedin.com/company/modernizing-medicine/>
> > [image:
> > [ YouTube ]] <http://www.youtube.com/user/modernizingmedicine> [image: [
> > Twitter ]] <https://twitter.com/modmed_EMA> [image: [ Blog ]]
> > <http://www.modmed.com/BlogBeyondEMR> [image: [ Instagram ]]
> > <http://instagram.com/modernizing_medicine>
> >
>



-- 
FRANK HERRMANN
SOFTWARE ENGINEER

T: 561-880-2998 x1563

E: frank.herrmann@modmed.com



[image: [ Modernizing Medicine ]] <http://www.modmed.com/>
[image: [ Facebook ]] <http://www.facebook.com/modernizingmedicine> [image:
[ LinkedIn ]] <http://www.linkedin.com/company/modernizing-medicine/> [image:
[ YouTube ]] <http://www.youtube.com/user/modernizingmedicine> [image: [
Twitter ]] <https://twitter.com/modmed_EMA> [image: [ Blog ]]
<http://www.modmed.com/BlogBeyondEMR> [image: [ Instagram ]]
<http://instagram.com/modernizing_medicine>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message