【发布时间】:2013-08-25 05:53:06
【问题描述】:
我正在使用带有 Java 的 Hibernate 3.0。
我有以下课程。
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 属性的映射。
我面临的问题是:
我通过 Hibernate 从 student_master 中删除了一行。
Student stu = new Student();
stu.setId(1l);
session.delete(stu);
transaction.commit();
但已删除 student (id = 1) 的引用并未从表 teacher_student_master 和 subject_student_master 中删除。
我该如何解决这个问题?
注意:如果我可以通过使用 Hibernate 进行某种配置而不是编码和查询触发来解决这个问题,那就太好了。
编辑:我看过这个link。但是在那,它提到我需要做一些编码,首先获取与学生=1 关联的所有教师,然后从学生列表中删除学生=1,然后更新教师。我想避免这种编码。有可能吗?
【问题讨论】:
标签: java sql sql-server-2008 hibernate hibernate-mapping