You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Andrus Adamchik (JIRA)" <ji...@apache.org> on 2009/09/15 20:46:57 UTC

[jira] Created: (CAY-1277) Prefetching may cause a root object to got from COMMITTED to MODIFIED state

Prefetching may cause a root object to got from COMMITTED to MODIFIED state
---------------------------------------------------------------------------

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


This is a subtle bug that I am (almost) sure existed prior to my last batch of prefetch-related changes. Per test demonstrating it below, prefetching on optional to-one relationships would cause a root object to go to MODIFIED state instead of COMMITTED. Since this happened without actual values modification, I guess nobody noticed it so far. A side effect though (aside from the memory leak it might introduce to a read-only DataContext) is that the object never refreshes its values from DB.


diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchTest.java b/framework/cayenne-jdk1.5-unpublished/sr
index 0c55a60..a5ba2bf 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchTest.java
@@ -464,6 +464,9 @@ public class DataContextPrefetchTest extends DataContextCase {
             // testing null to-one target
             Painting p4 = (Painting) results.get(3);
             assertNull(p4.readPropertyDirectly(Painting.TO_PAINTING_INFO_PROPERTY));
+
+            // there was a bug marking an object as dirty when clearing the relationships
+            assertEquals(PersistenceState.COMMITTED, p4.getPersistenceState());
         }
         finally {
             unblockQueries();


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


[jira] Closed: (CAY-1277) Prefetching may cause a root object to got from COMMITTED to MODIFIED state

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

Andrus Adamchik closed CAY-1277.
--------------------------------

    Resolution: Fixed

> Prefetching may cause a root object to got from COMMITTED to MODIFIED state
> ---------------------------------------------------------------------------
>
>                 Key: CAY-1277
>                 URL: https://issues.apache.org/jira/browse/CAY-1277
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Cayenne Core Library
>    Affects Versions: 3.0M6
>            Reporter: Andrus Adamchik
>            Assignee: Andrus Adamchik
>             Fix For: 3.0 beta 1
>
>
> This is a subtle bug that I am (almost) sure existed prior to my last batch of prefetch-related changes. Per test demonstrating it below, prefetching on optional to-one relationships would cause a root object to go to MODIFIED state instead of COMMITTED. Since this happened without actual values modification, I guess nobody noticed it so far. A side effect though (aside from the memory leak it might introduce to a read-only DataContext) is that the object never refreshes its values from DB.
> diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchTest.java b/framework/cayenne-jdk1.5-unpublished/sr
> index 0c55a60..a5ba2bf 100644
> --- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchTest.java
> +++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPrefetchTest.java
> @@ -464,6 +464,9 @@ public class DataContextPrefetchTest extends DataContextCase {
>              // testing null to-one target
>              Painting p4 = (Painting) results.get(3);
>              assertNull(p4.readPropertyDirectly(Painting.TO_PAINTING_INFO_PROPERTY));
> +
> +            // there was a bug marking an object as dirty when clearing the relationships
> +            assertEquals(PersistenceState.COMMITTED, p4.getPersistenceState());
>          }
>          finally {
>              unblockQueries();

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