2009-08-21 21 views
1

次のXMLマッピングファイルのように、2つのテーブルがあり、その主キーの名前が同じ場合はどうすればよいですか?多対多の同じPK

<class name="Person" table="person"> 

    <id name="uid_" type="java.lang.String" column="uid"> 
     <generator class="native" /> 
    </id> 

    <property name="name_" type="java.lang.String" column="pName" /> 
    <property name="age_" type="integer" column="age" /> 
    <property name="birthday_" type="date" column="birthday"/> 

    <many-to-one name="school" class="School" column="schoolID" unique="false" /> 

    <bag name="course"> 
     <key column="uid" /> 
     <many-to-many class="Course" column="uid" /> 
    </bag> 

    </class> 

PersonとCourseのプライマリキーは両方とも「uid」という名前です。休止状態には「マッピングの列を繰り返す」と書かれています。

+0

Person定義はどこですか? – DarkSquid

答えて

2

多対多の関係で列に与えられた名前を変更します。

<bag name="course"> 
     <key column="uid" /> 
     <many-to-many class="Course" column="course_uid" /> 
</bag> 

関係マッピングの列は、それが関係テーブルに使用される名前だけで、当然の列の識別子ではありません。

+0

コースのPKをcourse_uidに変更することを意味しますか? – Sefler

+0

いいえ、コースのPKは同じままにしておきます。多対多の関係で使用される列名を変更するだけです。 HibernateはコースのUIDを関係表のその名前の列に入れ、それを自動的にコース表のuid列に関連付けます。 – Zoidberg

0

代わり

<bag name="course"> 
    <key column="uid"/> 
    <many-to-many class="Course" column="course_uid"/> 
</bag> 

を次のようにあなたはそれが関係なく、コースのマッピングファイルの作品

<bag name="course"> 
    <key column="uid"/> 
    <composite-element class="Course"> 
     // define properties here 
    </composite-element> 
</bag> 

を試してみて、複合要素として、あなたの多対多マッピングをマッピングすることができます

関連する問題