好的,所以这可能是一个琐碎的问题,但是我在可视化和理解差异以及何时使用它们方面遇到困难。对于诸如单向和双向映射之类的概念如何影响一对多/多对多关系,我也还不清楚。我现在正在使用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 }
那么在这种情况下,我将进行哪种映射?对于这个特定示例的答案肯定会受到赞赏,但我也确实希望获得何时使用一对多和多对多以及何时使用联接表与联接列以及单向与双向的概述。
一对多 :一个人有很多技能,一个技能不会在一个人之间重复使用
多对多 :一个人有很多技能,一种技能在人与人之间重复使用
在一对多关系中,一个对象是“父”对象,一个对象是“子”对象。父母控制孩子的存在。在多对多中,这两种类型的存在都依赖于两者之外的某种东西(在较大的应用程序上下文中)。
您的主题(领域)应决定该关系是一对多还是多对多-但是,我发现使关系成为单向或双向是一种权衡内存,处理,性能的工程决策。等
令人困惑的是,多对多双向关系不必是对称的!也就是说,一堆人可以指向一项技能,但该技能不必仅与那些人相关。通常会,但是这种对称性不是必需的。以爱为例- 它是双向的(“我爱”,“爱我”),但常常是不对称的(“我爱她,但她不爱我”)!
所有这些都得到了Hibernate和JPA的良好支持。只要记住,在管理双向多对多关系时,Hibernate或任何其他ORM都没有维护对称性……这完全取决于应用程序。