1

我在 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,所有的关系都应该是双向的吗?

4

1 回答 1

0

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

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

于 2014-01-14T08:42:02.160 回答