Since we mostly focused on policy- and event-based *query* caches, the API for 
managing caching of individual objects is not as streamlined, but here it is 
FWIW:

T myObject = ..;
ObjectContext context = myObject.getObjectContext();
ObjectId id = myObject.getObjectId();

// kick it out, unset ObjectContext (side effect - sets ObjectId to null)
context.getGraphManager().unregisterNode(id);

// restore ObjectId.. it was set to null in the call above (which we probably 
should change)
myObject.setObjectId(id);

// get a fresh fault
myObject = context.localObject(myObject);

Andrus


> On Feb 21, 2017, at 11:54 PM, Musall, Maik <[email protected]> wrote:
> 
> Hi all,
> 
> I have an application using a big shared snapshot cache. Objects freshly 
> instantiated in an ObjectContext get their attributes populated based on the 
> snapshot cache at the time, and keep them during the context's lifetime, 
> which is also what I want. (Last week I found a page on cayenne.apache.org 
> <http://cayenne.apache.org/> explaining this behaviour, but I can't find it 
> again. Seems not to live within the linked Guide hierarchy.)
> 
> In some cases though, I have object instances in ObjectContext 1 which I know 
> are getting modified in ObjectContext 2, and I want them to be updated after 
> commit in context 1. In EOF, I could call oc1.refreshObject(obj), or even 
> oc1.refreshAllObjects(), which will merge the new values in from the snapshot 
> cache. Is there any way to do this in Cayenne, short of refetching which 
> would cost a roundtrip to the database even though I know I already have the 
> current values in the snapshot cache?
> 
> (I had a question posted recently about "creating a fault for an ObjectId", 
> but this is different because I need the commit in context 2 to go through to 
> the database.)
> 
> Maik
> 

Reply via email to