小编典典

一对多、多对一和多对多的区别?

all

好的,所以这可能是一个微不足道的问题,但我无法想象和理解差异以及何时使用它们。对于单向和双向映射等概念如何影响一对多/多对多关系,我也有点不清楚。我现在正在使用
Hibernate,所以任何与 ORM 相关的解释都会有所帮助。

例如,假设我有以下设置:

public class Person {
    private Long personId;
    private Set<Skill> skills;
    //Getters and setters
}

public class Skill {
    private Long skillId;
    private String skillName;
    //Getters and setters
}

那么在这种情况下,我会有什么样的映射?对这个特定示例的回答绝对值得赞赏,但我也非常希望了解何时使用一对多和多对多以及何时使用连接表与连接列以及单向与双向。


阅读 176

收藏
2022-07-06

共1个答案

小编典典

一对多 :一个人有很多技能,一个技能不会在人之间重用

  • 单向 :一个人可以通过其集合直接引用技能
  • 双向 :每个“子”技能都有一个指向 Person 的指针(未在您的代码中显示)

多对多 :一个人有很多技能,一个技能在人之间重用

  • 单向 :一个人可以通过其集合直接引用技能
  • 双向 :一项技能有一组与之相关的人员。

在一对多关系中,一个对象是“父”,一个是“子”。父母控制着孩子的存在。在多对多中,任何一种类型的存在都取决于它们两者之外的东西(在更大的应用程序上下文中)。

您的主题(领域)应该决定关系是一对多还是多对多 - 但是,我发现使关系单向或双向是一个权衡内存、处理、性能的工程决策, ETC。

令人困惑的是,多对多双向关系不需要对称!也就是说,一群人可以指向一项技能,但该技能不必只与这些人相关。通常它会,但这种对称性不是必需的。以爱为例——它是双向的(“I-Love”、“Loves-
Me”),但通常是不对称的(“我爱她,但她不爱我”)!

所有这些都得到了 Hibernate 和 JPA 的良好支持。请记住,在管理双向多对多关系时,Hibernate 或任何其他 ORM
不会对保持对称性产生任何影响……这完全取决于应用程序。

2022-07-06