[
https://issues.apache.org/cayenne/browse/CAY-1183?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrey Razumovsky closed CAY-1183.
----------------------------------
Resolution: Fixed
Fix Version/s: 3.0M6
The root of the problem is that client data objects use lazy faulting, so a new
query is generated when trying to resolve relationship. As the object in child
context is not NEW, query is directed to parent context, and since it is not
committed yet, RelationshipQuery is fired upon NEW object. This triggers an
exception.
Generally I don't like the workaround, but it seems to be the only to do a soft
fix.
> commitToParent() makes object persistence state committed, produces exception
> when using object in parent context (ROP)
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: CAY-1183
> URL: https://issues.apache.org/cayenne/browse/CAY-1183
> Project: Cayenne
> Issue Type: Bug
> Components: Cayenne Core Library
> Affects Versions: 3.0M5
> Environment: ROP (maybe also 2t cayenne, I have not tried)
> Reporter: Marcin Skladaniec
> Assignee: Andrey Razumovsky
> Priority: Critical
> Fix For: 3.0M6
>
>
> This is a bit of pseudocode showing the problem
> Artist artist = parentContext.perfrormQuery(new
> SelectQuery(Artist.class)).get(0);
> CayenneContext childContext = parentContext.createChildContext();
> Painting painting = childContext.newObject(Painting.class);
> painting.setArtist(artist);
> painting.setBlah...
> childContext.commitToParent();
> for(Painting p : artist.getPaintings())
> logger.debug("painting persistence state :
> "+PersistenceState.persistenceStateName(p.getPersistenceState())); //all
> objects are in state COMMITTED
> this causes no problems so far, but if one now decides to
> p.getSomeRelatiohship();
> an exception will be raised, because the relationship has not been faulted
> yet:
> [java] Caused by: java.lang.Exception: [v.3.0-SNAPSHOT ${project.build.date}
> ${project.build.time}] Can't build a query for relationship
> 'someRelationship' for temporary id: <ObjectId:Painting,
> TEMP:00000160F3600029>
> [java] at
> org.apache.cayenne.remote.service.BaseRemoteService.processMessage(BaseRemoteService.java:160)
> ... 25 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.