好的,这可能是一个微不足道的问题,但我无法想象和理解差异以及何时使用它们。我也不太清楚单向和双向映射等概念如何影响一对多/多对多关系。我现在正在使用 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
}
那么在这种情况下,我会有什么样的映射?非常感谢对这个特定示例的回答,但我也非常想了解何时使用一对多和多对多以及何时使用连接表与连接列以及单向与双向。
原文由 Ian Dallas 发布,翻译遵循 CC BY-SA 4.0 许可协议
一对多:一个人有很多技能,一个技能不能在人与人之间重复使用
多对多:一个人有很多技能,一个技能在人与人之间重复使用
在一对多关系中,一个对象是“父”,一个是“子”。父母控制着孩子的存在。在多对多中,任何一种类型的存在都依赖于它们之外的某些东西(在更大的应用程序上下文中)。
您的主题(领域)应该决定这种关系是一对多还是多对多——但是,我发现使关系成为单向或双向是一种权衡内存、处理、性能的工程决策, ETC。
令人困惑的是,多对多双向关系不需要对称!也就是说,一群人可以指向一项技能,但该技能不必仅与这些人相关。通常它会,但这种对称性不是必需的。以爱为例——它是双向的(“我爱”、“爱我”),但通常是不对称的(“我爱她,但她不爱我”)!
所有这些都得到了 Hibernate 和 JPA 的良好支持。请记住,Hibernate 或任何其他 ORM 不会在管理双向多对多关系时保持对称性……这完全取决于应用程序。