[ 
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 via email to