用关系删除对象 - 休眠

时间:2014-01-14 08:31:07

标签: hibernate entity-relationship cascade bidirectional-relation

我在使用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,如果所有关系都是双向的吗?

1 个答案:

答案 0 :(得分:0)

课程实体由3个实体引用,并不总是拥有方。在这种情况下,您根本不应使用级联。在这种级联移除之后,这种关系将处于不一致的状态。

当两个实体具有一对多关系时,级联很好,但对于更多实体和多对多关系(以及多对一关系的多方面),你必须'手动'。