openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pinaki Poddar <ppod...@apache.org>
Subject Re: [jira] Commented: (OPENJPA-692) Bi-directional One-to-Many mapping with a JoinTable fails for Update or Delete operation
Date Mon, 11 Aug 2008 09:59:50 GMT

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 jira@apache.org 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.


Mime
View raw message