我通过 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的新行(定义为唯一的)。
所以我的问题是:如何让hibernate通过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>
任何帮助都会得到满足。
答案 0 :(得分:0)
由于您为 coursesGrades 地图设置了倒数true,表示学生不是此关系的所有者,因此不会更新成绩。您如何准确更新数据?另外我不明白你的 StudentCourse 类映射,是不是学生中定义的映射足以映射StudentCourse表?