Hibernate 多对多相同的PK

Hibernate 多对多相同的PK,hibernate,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.l

如果我有两个表,并且它们的主键具有与下面的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>


人员和课程的主键都命名为“uid”。hibernate表示“映射中的重复列”。

更改多对多关系中为列指定的名称

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


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

您可以将多对多映射映射为复合元素,如下所示

而不是

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

试一试


//在此处定义属性

无论课程映射文件在哪里,它都可以工作。人员定义在哪里?不,课程的主键保持不变。只需更改多对多关系中使用的列名。Hibernate将使课程的UID进入关系表中具有该名称的列,同时自动将其与课程表中的UID列关联。
<bag name="course">
    <key column="uid"/>
    <composite-element class="Course">
        // define properties here
    </composite-element>
</bag>