多对多PK相同

时间:2009-08-21 18:23:11

标签: hibernate

如果我有两个表并且它们的主键具有相同的名称(如下面的XML映射文件所示),我该怎么办?

<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”。 hibernate说“映射中的重复列”。

2 个答案:

答案 0 :(得分:2)

以多对多的关系更改为列提供的名称。

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

关系映射中的列不是课程列的标识符,它只是在关系表中使用的名称。

答案 1 :(得分: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>

无论课程映射文件

如何,它都有效