Java Mailing List Archive

http://www.gg3721.com/

Home » users.openjpa »

OpenJPA - two-sided relation between objects Issue

Madhu Kalaimalai

2008-08-11

Replies: Find Java Web Hosting

Author LoginPost Reply
We have an existing application developed using the EJB 2.0 and we migrated to EJB 3.0 to openJPA.
 
The current implementation we only support one class to mapped to one table and we don’t support relation built between the managed objects. We wanted to enhance to build the relations among the managed objects and at the same time support existing code to work after the relations are built between the objects.
 
Lets take an example , I have an Address class and it contains a collections of phones ie there is one to many relation b/w the Address and Phone.
 
Now the addressId in the Phone class is mapped as the Column as part of the existing code and the new phones collection is added to the Address as part of the enhancement which maps.
 
When we persist the Object Address, we get the following exception as the column is mapped from two sides on the object graph.
 
Is there a way in OpenJPA to say the persistence fwk to ignore the column mapping when using the relation in an object graph ?
 
I assume, I am able to explain the problem.
 
Error :
 
Caused by: <4|true|0.9.5-incubating> org.apache.openjpa.persistence.InvalidStateException: Attempt to set column "PHONE.ADDR_FK_ID" to two different values: (class java.lang.Long)"1,964,347", (null)"null" This can occur when you fail to set both sides of a two-sided relation between objects, or when you map different fields to the same column, but you do not keep the values of these fields in synch.
 
 
Code :
public class Address..
 
private java.util.Set<Phone> phones;
 
@OneToMany( cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
@ElementJoinColumn(name="ADDR_FK_ID", referencedColumnName="ADDR_ID")
public java.util.Set<Phone> getPhones() {
return this.phones;
}
 
public void setPhones(java.util.Set<Phone> phones) {
               this.phones = phones;
}
 
 
public class Phone….
 
private Long addressId
 
@Basic()
@ Column(name=" ADDR_FK_ID",nullable=true)
public Long getAddressId()
{
return this.addressId;
}
 Rgds
Madhu


©2008 gg3721.com - Jax Systems, LLC, U.S.A.