You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Pinaki Poddar (JIRA)" <ji...@apache.org> on 2008/08/25 16:05:44 UTC

[jira] Assigned: (OPENJPA-693) Can not persist Parent-Child mapping when child refers to parent via parent's primary identity (and not parent's object reference) and parent uses database sequence for its own identity

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

Pinaki Poddar reassigned OPENJPA-693:
-------------------------------------

    Assignee: Pinaki Poddar

> Can not persist Parent-Child mapping when child refers to parent via parent's primary identity (and not parent's object reference) and parent uses database sequence for its own identity
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-693
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-693
>             Project: OpenJPA
>          Issue Type: Bug
>            Reporter: Pinaki Poddar
>            Assignee: Pinaki Poddar
>
> The following use case is reported in the users' group [1].
> A typical Parent-Child (Address has many Phones) relationship. But Phone refers to Address by its primary key. And database assigns the primary key of the Address.
> When and how to set the child's reference field to its parent?
> Approach A:
> 1. Remove all children from Parent, but remember them
> 2. flush() the Parent.
> 3. Database will now assign identity to Parent
> 4. Add the children back and set each child's identifier to the newly assigned identifier of the Parent
> 5. commit
> The other approach B which is cleaner
> 1. Add a @PostPersist method to Parent.java as follows
>      @PostPersist
>      public void postPersist() {
>            if (children== null) return;
>            for (Child child : children)
>                parent.setParentId(this.getId());
>      }
> 2. commit()
> Unfortunately Approach B does not work as expected with existing OpenJPA because it prohibits Phone.addressId value to be reassigned during a flush cycle as resulted from Address.postPersist() method.
> I have added a fix to relax that prohibition under some circumstances but I am concerned whether this relaxing of restriction will now allow other truly invalid use cases those the original restriction was duly imposing. 
> The fix passes the OpenJPA test corpus -- but that is also not proof enough of its robustness.
> Comments/thoughts?

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