1. 程式人生 > >Hibernate中many-to-many

Hibernate中many-to-many

//測試類Test:
public class Test {
	public static void main(String[] args) {
		//例項化Test1物件;
		Test1 test1=new Test1();
		test1.setT1Id(1);
		test1.setT1Name("zhao1");
        //例項化Test2物件;
		Test2 test2=new Test2();
		test2.setT2Id(1);
		test2.setT2Name("wo1");
        //例項化Test1ManyTest2Id物件;
		Test1ManyTest2Id t1_t2_id=new Test1ManyTest2Id();
		//資料庫中組合組合主鍵;
		t1_t2_id.setTest1(test1);
		t1_t2_id.setTest2(test2);
        //例項化Test1ManyTest2物件
		Test1ManyTest2 t1_t2=new Test1ManyTest2();
		t1_t2.setId(t1_t2_id);
		//執行儲存;
		Session session=HibernateSessionFactory.getSession();
		Transaction tr=session.beginTransaction();
		session.save(test1);
		session.save(test2);
		session.save(t1_t2);
		tr.commit();
		HibernateSessionFactory.closeSession();
		
		System.out.println("save over =====");
	}

}

  本測試有三張表TEST1,TEST2,TEST1_MANY_TEST2;

  Test1.hbm.xml:

<hibernate-mapping>
    <class name="hibernate.Test1" table="TEST1" schema="SCOTT">
        <id name="t1Id" type="long">
            <column name="T1_ID" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="t1Name" type="string">
            <column name="T1_NAME" length="20" not-null="true" />
        </property>

        <set name="test1ManyTest2s" table="TEST1_MANY_TEST2" cascade="save-update" inverse="true">
            <key>
                <column name="T1_ID" precision="10" scale="0" not-null="true" />
            </key>
            <many-to-many class="hibernate.Test2" column="T2_ID" />
        </set>
    </class>
</hibernate-mapping>

   Test1.hbm.xml:

<hibernate-mapping>
    <class name="hibernate.Test2" table="TEST2" schema="SCOTT">
        <id name="t2Id" type="long">
            <column name="T2_ID" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="t2Name" type="string">
            <column name="T2_NAME" length="20" not-null="true" />
        </property>
        <set name="test1ManyTest2s" table="TEST1_MANY_TEST2" cascade="save-update" inverse="true">
            <key>
                <column name="T2_ID" precision="10" scale="0" not-null="true" />
            </key>
            <many-to-many class="hibernate.Test1" column="T1_ID" />
        </set>
    </class>
</hibernate-mapping>

   Test1ManyTest2.hbm.xml:

<hibernate-mapping>
    <class name="hibernate.Test1ManyTest2" table="TEST1_MANY_TEST2" schema="SCOTT">
        <composite-id name="id" class="hibernate.Test1ManyTest2Id">
            <key-many-to-one name="test1" class="hibernate.Test1">
                <column name="T1_ID" precision="10" scale="0" />
            </key-many-to-one>
            <key-many-to-one name="test2" class="hibernate.Test2">
                <column name="T2_ID" precision="10" scale="0" />
            </key-many-to-one>
        </composite-id>
    </class>
</hibernate-mapping>

   資料庫Oracle中的表:

   有三張表TEST1,TEST2,TEST1_MANY_TEST2;

   注意:1.每張表各有主鍵 2.其中TEST1_MANY_TEST2是組合主鍵;