Let me start this post by thanking the Cayenne dev team for their great work. 
The project I'm
working on switched from Hibernate to Cayenne several months ago. I can 
honestly say the decision
to switch is one of the best things that ever happened to my project.

Now on to my problem...

I have a situation where I 

1. Add a newly created object to a relationship. 

        EstimateRoom room = context.newObject(EstimateRoom.class);

        // Several lines configuring variables in room
        
        floorModel.getEstimate().addToRooms(room);

2. Remove the object from the relationship

        estimate.removeFromRooms(obj);
        context.deleteObject(obj);

3. Attempt to commit to the parent DataContext

This works as long as the object is the last element contained in the List 
maintaining the
relationship. If it is in the middle of the List(I sort the list after the room 
is inserted) then
I receive the following exception.


[v.3.0M3 Jan 27 2008 20:12:33] Commit Exception
org.apache.cayenne.CayenneRuntimeException: [v.3.0M3 Jan 27 2008 20:12:33] 
Commit Exception
        at 
org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1207)
        at 
org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1088)
        at 
com.logicalsolutions.estimator.estimate.EstimatePanel.onApply(EstimatePanel.java:1522)
        at 
com.logicalsolutions.estimator.estimate.EstimatePanel.vaidateAndSave(EstimatePanel.java:1386)
        at
com.logicalsolutions.estimator.estimate.EstimatePanel$20.actionPerformed(EstimatePanel.java:1323)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown 
Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Attempt to add null target 
DataObject.
        at 
org.apache.cayenne.CayenneDataObject.addToManyTarget(CayenneDataObject.java:262)
        at
org.apache.cayenne.reflect.generic.DataObjectToManyProperty.addTarget(DataObjectToManyProperty.java:72)
        at 
org.apache.cayenne.access.ChildDiffLoader$1.visitToMany(ChildDiffLoader.java:131)
        at
org.apache.cayenne.reflect.generic.DataObjectToManyProperty.visit(DataObjectToManyProperty.java:112)
        at 
org.apache.cayenne.access.ChildDiffLoader.arcCreated(ChildDiffLoader.java:119)
        at 
org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:445)
        at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:92)
        at 
org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:135)
        at 
org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:1135)
        at org.apache.cayenne.access.DataContext.onSync(DataContext.java:1117)
        at 
org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1175)
        ... 29 more


So a few questions...
1. Is it OK to sort the Lists that represent the relationships.

2. Is this a known issue with a workaround. Yes I've searched, and searched, 
and searched both the
mailing list and JIRA.

3. How do I get more information about what's really going on in Cayenne. Is 
there a way to see
more than what is included in the Exception stack trace.


Any help is very much appreciated!

Brian






Reply via email to