Runnning AS 4.0.4 EJB RC5
I have two classes one a parent the other a child. The child is mapped into
the parent using a unidirectional onetomany.
When I create a new parent, and add a new instance of a child to the parent
then persist, a foreign key violation is thrown since JBOSS does not update the
children with the generated key of the parent before attempting to insert them.
Is this the expected behavior (it certainly was not in my case).
Example code:
package datatypes;
@Entity
@Table(name = "PERSON")
public class Person{
private long id = 0;
private String firstName = null;
private String lastName = null;
private List addresses = new ArrayList();
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "IID")
public Long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
/**
* @return Returns the firstName.
*/
@Column(name="SZFIRSTNAME")
public String getFirstName() {
return firstName;
}
/**
* @param firstName The firstName to set.
*/
public void setFirstName(String firstName) {
this.firstName = setString(firstName);
}
/**
* @return Returns the lastName.
*/
@Column(name="SZLASTNAME")
public String getLastName() {
return lastName;
}
/**
* @param lastName The lastName to set.
*/
public void setLastName(String lastName) {
this.lastName = setString(lastName);
}
/**
* @return Returns the addresses.
*/
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="IPERSONID")
public List getAddresses() {
return addresses;
}
/**
* @param addresses The addresses to set.
*/
public void setAddresses(List addresses) {
this.addresses = addresses;
}
}
Child Class
package datatypes;
@Entity
@Table(name = "ADDRESS")
public class Address {
private long id = 0;
private long parentId = 0;
private Integer streetNum;
private String streetName;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "IID")
public Long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
@Column(name = "IPERSONID")
public Long getParentId()
{
return parentId;
}
public void setParentId(long parentId)
{
this.parentId = parentId;
}
@Column(name = "ISTREETNUM")
public Integer getStreetNum()
{
return streetNum;
}
public void setStreetNum(Integer streetNum)
{
this.streetNum = streetNum;
}
@Column(name = "SZSTREETNAME")
public String getStreetName()
{
return streetName;
}
public void setStreetName(String streetName)
{
this.streetName = setString(streetName);
}
}
Test Case :
Person temp = new AdditionalParty();
temp.setId(0);
temp.setLastName("LAST NAME");
temp.setLastName("FIRST NAME");
PersonAddress a = new PersonAddress();
a.setStreetNum(1234);
a.setStreetName("STREET NAME");
temp.getAddresses().add(a);
entityManager.persist(temp);
entityManager.flush();
Now when I run this an foreign key violation is thrown when hibernate tries to
insert the address record. I assumed hibernate would update the children with
the parents id based on the onetomany mapping.
If I remove the code to add the address this code executes as expected and the
variable temp has the generated id after calling persist.
What am I missing here?
I am surprised I have not seen more questions regarding this behavior.
Thanks for any help on this issue
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3928813#3928813
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3928813
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user