当前位置: 首页 > 面试题库 >

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

刁浩言
2023-03-14
问题内容

好的,所以这可能是一个琐碎的问题,但是我在可视化和理解差异以及何时使用它们方面遇到困难。对于诸如单向和双向映射之类的概念如何影响一对多/多对多关系,我也还不清楚。我现在正在使用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都没有维护对称性……这完全取决于应用程序。



 类似资料:
  • 问题内容: 一对多和多对一关系的真正区别是什么?它只是颠倒的,是什么样的? 除了本主题之外,我找不到关于此主题的任何“易懂”教程:初学者使用的SQL:第3部分- 数据库关系 问题答案: 是的,反之亦然。它取决于实体存在于关系的哪一侧。 例如,如果一个部门可以雇用多名员工,则部门与员工之间是一对多的关系(1个部门雇用许多员工),而员工与部门之间的关系则是多对一的关系(许多员工在一个部门中工作)。 有

  • 这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统

  • 我正在努力理解如何处理与JOOQ的一对多和多对多关系的Pojo。 我存储玩家创建的位置(一对多关系)。一个位置可以容纳多个可能访问它的其他玩家(多对多)。数据库布局可归结为以下内容: 在我的java应用程序中,所有这些信息都存储在一个pojo中。请注意,玩家和受邀玩家列表可以从应用程序中更新,也需要在数据库中更新: 我可以使用JOOQ的pojo映射将这三个记录映射到单个pojo吗?我可以使用这个p

  • 我正在学习冬眠,只是有点困惑。

  • 一对多 多对一 关联模型 一对多: 一个部门有很多员工,但一个员工只能从属于一个部门 多对一: 多个员工只能属于一个部门 department 部门表,employee 员工表 egg-sequelize 实现一对多 分类表: 商品表: 分类 1------n 商品 1、model 里面建2张模型,分别是 category.js goods.js 2、catrgory.js 模型代码: modul