2009-08-21 34 views
1

如果我有兩個表並且它們的主鍵具有相同名稱,如下面的XML映射文件所示,我應該怎麼做?多對多相同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> 

人和課程的主鍵都命名爲「uid」。休眠狀態顯示「重複列映射」。

+0

人的定義在哪裏? – DarkSquid 2009-08-21 18:26:00

回答

2

更改在多對多關係中給予該列的名稱。

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

在關係映射的列不是當然的列的標識符,它只是在關係表中使用的名稱。

+0

你的意思是把課程的PK改成course_uid嗎? – Sefler 2009-08-21 18:35:09

+0

nope,離開課程的PK是一樣的。只需更改多對多關係中使用的列名稱即可。 Hibernate會將課程的UID放入關係表中的該名稱列中,同時自動將其與課程表中的uid列相關聯。 – Zoidberg 2009-08-22 04:38:41

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> 

它的工作原理課程映射文件

不管