1

我在表StudentCourse之间存在多对多关联,它们通过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>

任何帮助都会得到帮助。

4

1 回答 1

0

由于您将courseGrades映射的 inverse 设置为 true ,这意味着Student不是此关系的所有者,因此它不会更新成绩。你如何准确地更新你的数据?另外我不了解您的StudentCourse类映射,在 Student 中定义的映射是否足以映射 StudentCourse 表?

于 2012-12-15T19:34:30.613 回答