StudentCourseを介して接続されているテーブルStudentとCourseの間に多対多の関連付けがあります。 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>
データをフェッチするとき、すべてが素晴らしいようです。ただし、成績を更新しようとすると、一意の制約違反の例外が発生します。これは、行を更新する代わりに、休止状態が同じ 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>
どんな助けでも感謝します。