Quantcast

[jira] [Created] (OPENJPA-1966) Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Created] (OPENJPA-1966) Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager

JIRA jira@apache.org
Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager
------------------------------------------------------------------------------------------------------------------------

                 Key: OPENJPA-1966
                 URL: https://issues.apache.org/jira/browse/OPENJPA-1966
             Project: OpenJPA
          Issue Type: Bug
          Components: kernel
    Affects Versions: 2.1.0, 2.0.1, 1.2.2, 1.0.4
            Reporter: Jeremy Bauer
            Assignee: Jeremy Bauer


An entity graph (with cascade) containing bi-directional relationships or circular references may fail to merge properly if one or more of the entities in the graph do not have a state manager - either an active or detached state manager.  The result is that one or more of the merged entities may end up with a reference to a detached object.  This may not be immediately evident and could cause problems in subsequent operations. It can even affect the ordering of SQL statements since foreign keys may not be properly associated with the detached entities.

For example:  A <- OneToOne -> B
em.clear()
Detached graph:  B <--> A
A: Is detached, has DetachedStateManager
B: Is detached, No state manager, only detached state field.  (ie. @DetachedState Object state)
Merge: B
After merge:  B' --> A' --> B (detached)

If B contains a state manager the result of the merge is correct: B' <--> A'

The source of the problem is that the "no state manager" attachment path creates a new PC + state manager and assigns this state manager to the detached instance so that it can be used to attach all its fields.  During a cascade, this detached entity (with borrowed state manager) looks persistent, so it can get attached into the resulting merge graph.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Updated] (OPENJPA-1966) Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager

JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/OPENJPA-1966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jeremy Bauer updated OPENJPA-1966:
----------------------------------

    Attachment: OPENJPA-1966.patch

Attaching a patch and simple jUnit.  The patch queries the attach cache before the using the broker to determine what to use for a pc reference during attachment.  More jUnits will be provided.

> Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1966
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1966
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.0.4, 1.2.2, 2.0.1, 2.1.0
>            Reporter: Jeremy Bauer
>            Assignee: Jeremy Bauer
>         Attachments: OPENJPA-1966.patch
>
>
> An entity graph (with cascade) containing bi-directional relationships or circular references may fail to merge properly if one or more of the entities in the graph do not have a state manager - either an active or detached state manager.  The result is that one or more of the merged entities may end up with a reference to a detached object.  This may not be immediately evident and could cause problems in subsequent operations. It can even affect the ordering of SQL statements since foreign keys may not be properly associated with the detached entities.
> For example:  A <- OneToOne -> B
> em.clear()
> Detached graph:  B <--> A
> A: Is detached, has DetachedStateManager
> B: Is detached, No state manager, only detached state field.  (ie. @DetachedState Object state)
> Merge: B
> After merge:  B' --> A' --> B (detached)
> If B contains a state manager the result of the merge is correct: B' <--> A'
> The source of the problem is that the "no state manager" attachment path creates a new PC + state manager and assigns this state manager to the detached instance so that it can be used to attach all its fields.  During a cascade, this detached entity (with borrowed state manager) looks persistent, so it can get attached into the resulting merge graph.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Updated] (OPENJPA-1966) Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager

JIRA jira@apache.org
In reply to this post by JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/OPENJPA-1966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jeremy Bauer updated OPENJPA-1966:
----------------------------------

    Attachment: OPENJPA-1966.patch

Updated patch with additional test variations.

> Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1966
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1966
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.0.4, 1.2.2, 2.0.1, 2.1.0
>            Reporter: Jeremy Bauer
>            Assignee: Jeremy Bauer
>         Attachments: OPENJPA-1966.patch, OPENJPA-1966.patch
>
>
> An entity graph (with cascade) containing bi-directional relationships or circular references may fail to merge properly if one or more of the entities in the graph do not have a state manager - either an active or detached state manager.  The result is that one or more of the merged entities may end up with a reference to a detached object.  This may not be immediately evident and could cause problems in subsequent operations. It can even affect the ordering of SQL statements since foreign keys may not be properly associated with the detached entities.
> For example:  A <- OneToOne -> B
> em.clear()
> Detached graph:  B <--> A
> A: Is detached, has DetachedStateManager
> B: Is detached, No state manager, only detached state field.  (ie. @DetachedState Object state)
> Merge: B
> After merge:  B' --> A' --> B (detached)
> If B contains a state manager the result of the merge is correct: B' <--> A'
> The source of the problem is that the "no state manager" attachment path creates a new PC + state manager and assigns this state manager to the detached instance so that it can be used to attach all its fields.  During a cascade, this detached entity (with borrowed state manager) looks persistent, so it can get attached into the resulting merge graph.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Commented] (OPENJPA-1966) Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager

JIRA jira@apache.org
In reply to this post by JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/OPENJPA-1966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13214596#comment-13214596 ]

Vermeulen commented on OPENJPA-1966:
------------------------------------

We are experiencing exactly this problem with all our cascading relations of the form A <- OneToMany -> B. We prefer using detached entities without a state manager because we have a client-server system where the client may insert/update entities through the server.
What we get on merging A is A' -> B'_i, with B'_i -> A.
An easy workaround for us is to manually set the reference from each B'_i  to A' after detaching.
However it would be very nice if this bug is fixed because this is easy to forget when working with a new entity.
               

> Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1966
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1966
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.0.4, 1.2.2, 2.0.1, 2.1.0
>            Reporter: Jeremy Bauer
>            Assignee: Jeremy Bauer
>         Attachments: OPENJPA-1966.patch, OPENJPA-1966.patch
>
>
> An entity graph (with cascade) containing bi-directional relationships or circular references may fail to merge properly if one or more of the entities in the graph do not have a state manager - either an active or detached state manager.  The result is that one or more of the merged entities may end up with a reference to a detached object.  This may not be immediately evident and could cause problems in subsequent operations. It can even affect the ordering of SQL statements since foreign keys may not be properly associated with the detached entities.
> For example:  A <- OneToOne -> B
> em.clear()
> Detached graph:  B <--> A
> A: Is detached, has DetachedStateManager
> B: Is detached, No state manager, only detached state field.  (ie. @DetachedState Object state)
> Merge: B
> After merge:  B' --> A' --> B (detached)
> If B contains a state manager the result of the merge is correct: B' <--> A'
> The source of the problem is that the "no state manager" attachment path creates a new PC + state manager and assigns this state manager to the detached instance so that it can be used to attach all its fields.  During a cascade, this detached entity (with borrowed state manager) looks persistent, so it can get attached into the resulting merge graph.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Issue Comment Edited] (OPENJPA-1966) Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager

JIRA jira@apache.org
In reply to this post by JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/OPENJPA-1966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13214596#comment-13214596 ]

Vermeulen edited comment on OPENJPA-1966 at 2/23/12 12:47 PM:
--------------------------------------------------------------

We are experiencing exactly this problem with all our cascading relations of the form A <- OneToMany -> B. We prefer using detached entities without a state manager because we have a client-server system where the client may insert/update entities with a remote method call to the server.
What we get on merging A is A' -> B'_i, with B'_i -> A.
An easy workaround for us is to manually set the reference from each B'_i  to A' after detaching.
However it would be very nice if this bug is fixed because this is easy to forget when working with a new entity.
               
      was (Author: slowstrider):
    We are experiencing exactly this problem with all our cascading relations of the form A <- OneToMany -> B. We prefer using detached entities without a state manager because we have a client-server system where the client may insert/update entities through the server.
What we get on merging A is A' -> B'_i, with B'_i -> A.
An easy workaround for us is to manually set the reference from each B'_i  to A' after detaching.
However it would be very nice if this bug is fixed because this is easy to forget when working with a new entity.
                 

> Entity graphs containing bi-directional references may not merge correctly if an entity does not contain a state manager
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1966
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1966
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.0.4, 1.2.2, 2.0.1, 2.1.0
>            Reporter: Jeremy Bauer
>            Assignee: Jeremy Bauer
>         Attachments: OPENJPA-1966.patch, OPENJPA-1966.patch
>
>
> An entity graph (with cascade) containing bi-directional relationships or circular references may fail to merge properly if one or more of the entities in the graph do not have a state manager - either an active or detached state manager.  The result is that one or more of the merged entities may end up with a reference to a detached object.  This may not be immediately evident and could cause problems in subsequent operations. It can even affect the ordering of SQL statements since foreign keys may not be properly associated with the detached entities.
> For example:  A <- OneToOne -> B
> em.clear()
> Detached graph:  B <--> A
> A: Is detached, has DetachedStateManager
> B: Is detached, No state manager, only detached state field.  (ie. @DetachedState Object state)
> Merge: B
> After merge:  B' --> A' --> B (detached)
> If B contains a state manager the result of the merge is correct: B' <--> A'
> The source of the problem is that the "no state manager" attachment path creates a new PC + state manager and assigns this state manager to the detached instance so that it can be used to attach all its fields.  During a cascade, this detached entity (with borrowed state manager) looks persistent, so it can get attached into the resulting merge graph.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       
Loading...