建模循环依赖

时间:2017-12-19 14:51:04

标签: java data-modeling

我试图模拟学生和课程之间的关系。以下是我需要支持的2个高级查询:

  • 查找学生注册的所有课程
  • 找到所有注册课程的学生。

该关系是一个M:N关系船(多对多,即多个学生注册多个课程)。

我如何根据java对象建模它们。直觉上,学生和课程似乎互相引用,创建循环依赖(或反向引用)。

class Student{ 
 Long id
 String name
 List<Course> enrolledCourses;
 Long rollNumber
}

Course{
 Long id
 String name
 List<Student> enrolledStudents;
}

以上述方式对这些要求进行建模是否正确?

我对创建这样的循环依赖有点犹豫,但不知道我怎么能模仿它。

  • 高于正确的方法吗?
  • 或者是否有更好的方法来模拟这些行为?

2 个答案:

答案 0 :(得分:0)

如果我理解你,你有点害怕冗余。如果学生X访问课程Y,则在学生的课程列表中包含课程Y,在课程的学生列表中包含学生X.

如果你注意修改方法,这可能是模拟这种情况的最佳方法。 但是,如果你害怕最终与学生一起访问他不在的课程(根据课程),你将不得不像在关系数据库中那样创建一个关系对象。

现在,如果你对这种情况有更多想法,可能还有很多关于这次课程访问的内容。学生什么时候参观课程?他做过任何考试吗?结果是什么?哪位教授领导了这个课程的实例?在对此进行分析之后,您将对情况有更好的了解。

我的方法通常是先彻底分析情况。然后我分析我对数据的操作。最后,我开始考虑数据的最佳表示。

答案 1 :(得分:0)

这在Java中是没有问题的,也是正确的方法。双向关系,经常在两个方向上使用。在JPA中,他们通常会得到一个注释来懒散地获取它们。

事实上,使用JPA注释进行建模可以让您表达主键,多对一等。

我个人更喜欢long rollNumber而非可空Long rollNumber

当然,并不总是一件明智的事情,特别是当实体是从属的时候。