[
https://issues.apache.org/jira/browse/OPENJPA-693?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pinaki Poddar resolved OPENJPA-693.
-----------------------------------
Resolution: Fixed
Fix Version/s: 1.3.0
> 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
> Fix For: 1.3.0
>
>
> 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.