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>

データをフェッチするとき、すべてが素晴らしいようです。ただし、成績を更新しようとすると、一意の制約違反の例外が発生します。これは、行を更新する代わりに、休止状態が同じ 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>

どんな助けでも感謝します。

4

1 に答える 1

0

CoursesGradesマップに対してinverseをtrueに設定したため、Studentはこの関係の所有者ではないため、成績は更新されません。データを正確に更新するにはどうすればよいですか?また、 StudentCourseクラスのマッピングがわかりません。Studentで定義されたマッピングは、StudentCourseテーブルをマッピングするのに十分ではありませんか?

于 2012-12-15T19:34:30.613 に答える