While working on a project, I had something like the following:
ObjectContext child = parentContext.createChildDataContext();
List<EntityA> alist = lookupAs();
for(EntityA a : alist) {
a = child.localObject(a.getObjectId(),null);//note: doing
localObject(a.getObjectId(),a); still results in the exception
a.getMapRelationship().containsKey("someKey");//<---- problem line
}
Doing so resulted in:
java.lang.ClassCastException:
org.apache.cayenne.util.PersistentObjectMap
at
org
.apache
.cayenne
.util
.ObjectContextQueryAction
.interceptObjectConversion(ObjectContextQueryAction.java:134)
at
org
.apache
.cayenne
.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:
102)
at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1343)
at
org
.apache
.cayenne
.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:
316)
at
org
.apache
.cayenne
.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:95)
at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1343)
at
org.apache.cayenne.access.DataContext.performQuery(DataContext.java:
1332)
at
org
.apache
.cayenne.util.RelationshipFault.resolveFromDB(RelationshipFault.java:89)
at
org
.apache
.cayenne
.util.PersistentObjectMap.resolvedObjectMap(PersistentObjectMap.java:
134)
at
org
.apache
.cayenne.util.PersistentObjectMap.containsKey(PersistentObjectMap.java:
233)
A peek at and around ObjectContextQueryAction, line 134, shows:
else {
// TODO: Andrus 1/31/2006 -
IncrementalFaultList is not properly
// transferred between contexts....
List childObjects = new
ArrayList(objects.size());
Iterator it = objects.iterator();
while (it.hasNext()) {
Persistent object = (Persistent)
it.next();//this is line 134
childObjects.add(targetContext.localObject(object
.getObjectId(), object));
}
childResponse.addResultList(childObjects);
}
So the next object is a PersistentObjectMap, rather than a "Persistent".
Looks like a bug to me, but I thought I would check to see if I'm just
missing something obvious before I file a jira.
Note that the code works if, instead of creating a child context, I
use the parent context (which is a top-level DataContext).
Robert
This archive was generated by hypermail 2.0.0 : Tue Feb 24 2009 - 17:05:46 EST