Hibernate的多表操作

以前我们都是通过sql语句连关联两个或多个表。

表之间的关系(实体之间的关系):

  • 一对一

  • 一对多

    • 在多的一方创建指向一方的外键
  • 多对多

    • 创建一个中间表,用来存放两个表的主键作为外键。

一对多hibernate的关系配置

  • 实体关系,在多的一方的实体中创建一个一的一方的实体。在一的一方实体上创建一个多的一方的实体集合。

  • 创建映射文件,有几个实体就需要几个映射文件。

    • image.png

    • image.png

一对多的联级保存和更新

    • 什么叫级联:是指保存一个对象时,是否会保存其相关联的对象。

      • 级联试有方向性的:

        • 操作一的一方时候,是否操作到多的一方

        • 操作多的一方时候,是否操作一的一方

    • 不使用级联,容易出现瞬时对象异常。

    • 需要配置一下

      • image.png

      • [图片上传中...(image-c80a29-1571756535362-0)]

    • image.png

  • 一对多的级联删除:

    • 默认:删除数据,将键设置为null。级联删除一定要先删除,再删除。

    • 情况1:
      image.png
    • 情况2: 基本不用,删除多的一方,级联去删除一的一方。实际情况中不合理,很少用。

  • 双向维护关系产生多余SQL

    • image.png

    • 解决办法:单向维护、使一的一方放弃外键维护权。

    • image.png
    • 一对多的关联查询的修改的时候。(CRM练习)

  • 区分cascade和inverse:

    • image.png

多对多:

  • 可以用两个一对多来完成。

  • 也可以,双方都需要有一下配置。实体中都用set集合来关联对方对象。

  • image.png

  • 级联维护的时候,需要被动方放弃。

  • ‘多对多的级联删除基本用不上。

  • image.png

  • 多对多的其他的操作:(重要)

    • 给用户去 选择角色,改选角色,删除角色(给学生课程,修改选课,删除选课)

    • image.png
    • image.png
    • image.png

你可能感兴趣的:(Hibernate的多表操作)