[hibernate-issues] [Hibernate-JIRA] Created: (HBX-1039) many-to-many associations not working with hibernate
Vijaya Krishnan (JIRA)
noreply at atlassian.com
Mon Feb 4 14:03:55 EST 2008
many-to-many associations not working with hibernate
----------------------------------------------------
Key: HBX-1039
URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-1039
Project: Hibernate Tools
Issue Type: Bug
Environment: Hibernate Tools 3.2 beta 10, Oracle 10G,
Reporter: Vijaya Krishnan
Associated tables in a Many-To-Many relationship not updating with Hibernate. No HQL is generated to insert values into the link table. Using Hibernate Tools 3.2 beta 10
Here are the hbm and java snippets.
-------------------------------------------------------------------------------------
Person.hbm.xml
<!-- bi-directional many-to-many association to Staff -->
<set name="staffs" table="PERSON_STAFF" lazy="false" inverse="true" cascade="save-update">
<key>
<column name="PERSON_OID" precision="22" scale="0" not-null="true" />
</key>
<many-to-many class="domain.Staff" column="STAFF_OID" fetch="join" />
</set>
</class>
-----------------------------
Staff.hbm.xml
<!-- bi-directional many-to-many association to Person -->
<set name="persons" table="PERSON_STAFF" cascade="all">
<key>
<column name="STAFF_OID" precision="22" scale="0" not-null="true" />
</key>
<many-to-many column="PERSON_OID" class="domain.Person" />
</set>
--------------------------------------------------------------------
person.java
public class Person implements java.io.Serializable {
private long oid;
private String userid;
private String firstname;
private String lastname;
private Set staffs = new HashSet();
//other getters and setters here.
public Set getStaffs() {
return this.staffs;
}
public void setStaffs(Set staffs) {
this.staffs = staffs;
}
------------------------------------------------------
staff.java
public class Staff implements java.io.Serializable {
private long oid;
private String staffname;
private long headcount;
private Set persons = new HashSet(0);
//other getters and setters here.
public Set getPersons() {
return persons;
}
public void setPersons(Set persons) {
this.persons = persons;
}
}
------------------------------------------------------------------------
Link table columns:
CREATE TABLE PERSON_STAFF( PERSON_OID NUMBER NOT NULL, STAFF_OID NUMBER NOT NULL)
PERSON table has primary key oid and STAFF table has primary key oid as well. The link table is made of only the columns - person-oid and staff_oid. The CONSTRAINTs of priamry and foreign key relationships are all set in the database.
-------------------------------------------------------------------
The lines of code to update the tables:
person.getStaffs().add(newStaff); //Line 1
update(person); //Line 2
-------------------------------------------
A person is associated with multiple staffs e.g. five staffs. The line 2 update generates five updates to the staff table instead of one insert in the link table.
The above does not update the link table PERSON_STAFF, but updates the person and staff table.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list