gpt4 book ai didi

java - 如何通过 Hibernate 从数据库中删除一行及其所有引用?

转载 作者:搜寻专家 更新时间:2023-10-31 08:03:47 25 4
gpt4 key购买 nike

我在 Java 中使用 Hibernate 3.0。

我有以下类(class)。

Teacher.java

private long id;
private String teacherName;
private List<Student> students;
// getter-setter of all

主题.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>

主题.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 包含 idstudentName 属性的映射。

我面临的问题是:

我通过 Hibernate 从 student_master 中删除了一行。

Student stu = new Student();
stu.setId(1l);
session.delete(stu);
transaction.commit();

但被删除的student (id = 1)的引用并没有从表teacher_student_mastersubject_student_master中删除。

我怎样才能克服这个问题?

注意:如果我可以通过使用 Hibernate 进行某种配置而不是编码和查询触发来解决这个问题,那就太好了。

编辑:我看过这个 link .但是在那,有人提到我需要做一些编码,首先获取与学生=1相关联的所有教师,然后从学生列表中删除学生=1,然后更新教师。我想避免这种编码。可能吗?

最佳答案

您可以将 @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 用于您想要此行为的列。参见 this question获取更多信息。

或者,由于您正在通过 XML 使用 Hibernate 配置,请使用 cascade="delete-orphan"。看看this blog post其中解释了不同类型的级联。

关于java - 如何通过 Hibernate 从数据库中删除一行及其所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com