我在表Student和Course之间存在多对多关联,它们通过StudentCourse连接。 StudentCourse有一个名为Grade的额外属性。为了让学生访问特定课程的成绩,我在Student.hbm.xml中编写了以下映射:
<map name="coursesGrades" table="StudentCourse" lazy="false" cascade="save-update" inverse="true">
<key column="studentId" />
<map-key-many-to-many class="Course" column="courseId" />
<element type="integer" column="grade" />
</map>
获取数据时,一切似乎都很棒。但是,当尝试更新成绩时,我得到一个违反唯一约束的异常,因为 hibernate 没有更新行,而是尝试插入具有相同 studentId 和 courseId(定义为唯一)的新行。
所以我的问题是:我如何让休眠通过 studentId 和 courseId 更新地图?
StudentCourse.hbm.xml看起来像这样:
<class name="StudentCourse" table="StudentCourse"...>
<composite-id name="pk" class="StudentCoursePK">
<key-many-to-one name="Student" column="studentId"/>
<key-many-to-one name="Course" column="courseId"/>
</composite-id>
<property name="grade" type="integer"/>
</class>
任何帮助都会得到帮助。