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.