建模循环依赖

问题描述 投票:0回答:2

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

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

这种关系是一种M:N关系(多对多,i.s.多个学生注册多个课程)。

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

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

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

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

我有点犹豫要不要创建这样的循环依赖,但不知道如何我可以建模它。

  • 是正确的方法吗?
  • 或者是否存在更好的方法来模拟这些行为?
java data-modeling
2个回答
0
投票

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

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

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

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


0
投票

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

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

我个人更喜欢long rollNumber而不是可空的Long rollNumber

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

© www.soinside.com 2019 - 2024. All rights reserved.