Hibernate 多对多相同的PK
如果我有两个表,并且它们的主键具有与下面的XML映射文件相同的名称,我该怎么办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
<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>