如果我有两个表并且它们的主键具有相同的名称(如下面的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说“映射中的重复列”。
答案 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>
无论课程映射文件
如何,它都有效