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

Frank Schwarz commented on OPENJPA-692:
---------------------------------------

I tried the mapping as specified in the description field of this case.

It works with current trunk (revision 684688/1.3.0-SNAPSHOT). Schema, SQL 
statements and runtime behavior are OK with one exception:

Dissolving relationship, e.g.:
                        Address address = 
person.getAddresses().iterator().next();
                        person.getAddresses().remove(address);
                        address.setPerson(null);

leads to UPDATE PERSON_ADDRESS SET PERSON_SSN = ? WHERE ADDRESS_PHONE = ? 
[params=(null) null, (long) 3]
Actually it has to be DELETE FROM PERSON_ADDRESS WHERE ADDRESS_PHONE = ? 
[params=(long) 3]. Otherwise the join-table will get filled with meaningless 
<NULL, ADDRESS_PHONE> tupels


> Bi-directional One-to-Many mapping with a JoinTable fails for Update or 
> Delete operation
> ----------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-692
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-692
>             Project: OpenJPA
>          Issue Type: Bug
>            Reporter: Pinaki Poddar
>            Assignee: Pinaki Poddar
>             Fix For: 1.3.0
>
>
> Originally reported in user group message [1] by Frank Schwarz 
> If
> a) Entities A and B that are related in a one-to-many and many-to-one 
> bi-directional relation (typical Parent-Child pattern)
> b) mapped using a JoinTable instead of conventional mappedBy 
> then
> update/delete operation fails with OptimisticException (which itself is a 
> catch-all and sometimes misleading). 
> Typical mapping that encounters this error:
> public class Person {
>       @Id
>       private long ssn;
>       
>       @OneToMany(cascade=CascadeType.ALL)
>       @JoinTable(name="J_PERSON_ADDRESSES",
>                       joinColumns               = 
> @JoinColumn(name="PERSON_SSN",    referencedColumnName="SSN"),
>                       inverseJoinColumns = @JoinColumn(name="ADDRESS_PHONE", 
> referencedColumnName="PHONE"))
>     private Set<Address> addresses = new HashSet<Address>();
> public class Address {
>    @Id
>    private String phone;
>       
>     @ManyToOne
>     @JoinColumn(table="J_PERSON_ADDRESSES", referencedColumnName="SSN")
>     private Person person;
> [1] 
> http://n2.nabble.com/bidirectional-one-to-many-relationship-with-join-table-tc678479.html

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

Reply via email to