私はJavaでHibernate 3.0を使用しています。Hibernateを介してデータベースから行とそのすべての参照を削除するには?
私は以下のクラスを持っています。
Teacher.java
private long id;
private String teacherName;
private List<Student> students;
// getter-setter of all
Subject.java
private long id;
private String subjectName;
private List<Student> students;
// getter-setter of all
Student.java
private long id;
private String studentName;
// getter-setter of both
Teacher.hbm.xml
<class name="Teacher" table="teacher_master">
<!--other mappings-->
<list name="students" cascade="refresh" table="teacher_student_master">
<key column="teacher_id"/>
<index column="student_teacher_position" type="integer"/>
<many-to-many class="Student" column="student_id"/>
</list>
</class>
Subject.hbm.xml
<class name="Subject" table="subject_master">
<!--other mappings-->
<list name="students" cascade="refresh" table="subject_student_master">
<key column="subject_id"/>
<index column="student_subject_position" type="integer"/>
<many-to-many class="Student" column="student_id"/>
</list>
</class>
Student.hbm.xmlはID & studentName特性のマッピングを含んでいます。私が直面してる
問題は次のとおりです。
私は休止状態によるstudent_masterから行を削除します。
Student stu = new Student();
stu.setId(1l);
session.delete(stu);
transaction.commit();
しかし、削除された学生の参照(ID = 1)はテーブルteacher_student_masterとsubject_student_masterから削除されません。
どうすればこの問題を解決できますか?
注:&クエリの発行をコーディングするのではなく、Hibernateで何らかの設定を行うことでこの問題を克服できれば幸いです。
編集:私はこれを見ましたlink。しかし、それで私はいくつかのコーディングを行う必要があると言われています。まず、student = 1に関連付けられたすべての教師を取得し、学生のリストからstudent = 1を削除して&のリストから教師を更新します。私はこのコーディングを避けたい。出来ますか?
@RASだ双方向の関係で休止状態
を保存する前に、関係の世話(両側)を話します。 HBMマッピングのみを使用して回答を提供する方が良いでしょう。 –
私はあなたから与えられた両方のリンクを見ました。しかし両方のリンクでは、私はいくつかのコーディングを行う必要があると言われています。まず、student = 1に関連付けられたすべての教師を取得し、student = 1をstudent&私はこのコーディングを避けたい。出来ますか? – RAS
さて、あなたは次のテーブルを持っているとしましょう:学生、教師、コース(学生と教師をつなぐ)。生徒のCourseへの参照でDELETE_ORPHANを使用すると、student = 1を削除すると、この生徒と関係のあるすべてのコースも削除されます。すべてのコースをフェッチして手動で削除する必要はなく、Hibernateがそれを行います。 – Thiago