You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cayenne.apache.org by "Andrus Adamchik (JIRA)" <de...@cayenne.apache.org> on 2008/04/30 14:52:52 UTC

[jira] Created: (CAY-1044) NPE on commit when the new object was deleted before commit

NPE on commit when the new object was deleted before commit
-----------------------------------------------------------

                 Key: CAY-1044
                 URL: https://issues.apache.org/cayenne/browse/CAY-1044
             Project: Cayenne
          Issue Type: Bug
          Components: Cayenne Core Library
    Affects Versions: 3.0
            Reporter: Andrus Adamchik
            Assignee: Andrus Adamchik
             Fix For: 3.0


Affects 3.0M3 and probably 2.0 as well.  The following code causes the exception below:
 Painting p1 = child.newObject(Painting.class);
        p1.setPaintingTitle("P1");
        a.addToPaintingArray(p1);

        Painting p2 = child.newObject(Painting.class);
        p2.setPaintingTitle("P2");
        a.addToPaintingArray(p2);

        a.removeFromPaintingArray(p2);

        // this causes an error on commit
        child.deleteObject(p2);

        child.commitChangesToParent();

This is because artist -> painting diff is preserved for the deleted painting and parent context fails to process it. The fix is rather trivial

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

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (CAY-1044) NPE on commit when the new object was deleted before commit

Posted by "Andrus Adamchik (JIRA)" <de...@cayenne.apache.org>.
     [ https://issues.apache.org/cayenne/browse/CAY-1044?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrus Adamchik closed CAY-1044.
--------------------------------

    Resolution: Fixed

> NPE on commit when the new object was deleted before commit
> -----------------------------------------------------------
>
>                 Key: CAY-1044
>                 URL: https://issues.apache.org/cayenne/browse/CAY-1044
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Cayenne Core Library
>    Affects Versions: 3.0
>            Reporter: Andrus Adamchik
>            Assignee: Andrus Adamchik
>             Fix For: 3.0
>
>
> Affects 3.0M3 and probably 2.0 as well.  The following code causes the exception below:
>  Painting p1 = child.newObject(Painting.class);
>         p1.setPaintingTitle("P1");
>         a.addToPaintingArray(p1);
>         Painting p2 = child.newObject(Painting.class);
>         p2.setPaintingTitle("P2");
>         a.addToPaintingArray(p2);
>         a.removeFromPaintingArray(p2);
>         // this causes an error on commit
>         child.deleteObject(p2);
>         child.commitChangesToParent();
> This is because artist -> painting diff is preserved for the deleted painting and parent context fails to process it. The fix is rather trivial
> 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

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.