[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