我在使用Hibernate关系和Save-Update-Delete方面遇到了一些问题。可以说我有以下内容:
public class Subject{
@Id
private int ID;
private String Name;
//getters and setters
}
public class Grade{
@Id
private int ID;
private String Name;
//getters and setters
}
public class Course{
@Id
private int ID;
@ManyToOne
private Grade G;
@ManyToOne
private Subject S;
//getters and setters
}
public class Teacher extends User{
@ManyToMany
List<Course> Courses = new ArrayList<Course>();
//...
//getters and setters
}
事情是,我不能简单地删除主题,因为它有关系。 我的意思是,当我删除一个主题时,所有具有该主题的课程也必须删除。并且,如果删除课程,则应该存在“属于”该课程的主题。成绩和课程也是如此。
我的解决方案(暂时)是: 删除主题的方法,在删除主题本身之前调用删除具有该主题的所有课程的方法。
但我确信这不是正确的方法。我知道CascadeType应该可以解决这个问题,但我不知道在哪个时候使用它。
现在我们谈论的是Hibernate,如果所有关系都是双向的吗?
答案 0 :(得分:0)
课程实体由3个实体引用,并不总是拥有方。在这种情况下,您根本不应使用级联。在这种级联移除之后,这种关系将处于不一致的状态。
当两个实体具有一对多关系时,级联很好,但对于更多实体和多对多关系(以及多对一关系的多方面),你必须'手动'。