Hi,
Address address =
person.getAddresses().iterator().next();
person.getAddresses().remove(address);
address.setPerson(null);
Generally speaking, in JPA world, nulling a relation or removing an element
from a collection do not imply that the corresponding database record is
deleted.
To delete records from database, em.remove() needs to be invoked.
However, delete-orphan behavior that your example code implies is supported
by OpenJPA with @Dependent/@ElementDependent annotation on a relation.
JIRA [EMAIL PROTECTED] wrote:
>
>
> [
> 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.
>
>
>
--
View this message in context:
http://n2.nabble.com/-jira--Created%3A-%28OPENJPA-692%29-Bi-directional-One-to-Many-mapping-with-a-JoinTable-fails-for-Update-or-Delete-operation-tp683188p685628.html
Sent from the OpenJPA Developers mailing list archive at Nabble.com.