• hibernate 映射<四>多对一双向映射


    学生和班级的例子来说,多个学生可以对应一个班级。

    1.站在学生角度来说,学生就是多端。那么我们可以通过多对一来维护2者的关系。

    2.站在班级的角度来说,班级就是一端。那么我们可以通过一对多啦维护2者的关系。

    3.我们也可以双向关联两者的关系。(这个要牵涉到了反转)

    无论是多对一还是一对多,最终生成的数据库的表中,都会在多的一端增加了一个外键来关联一的一端。

    首先先站在学生的角度上 多对一:

    最终生成的数据库:

    下面是多对一映射中的字段意思:

    一对多中:

     

    生成的表结构和多对一 一样。

    保存的时候,先保存一端,然后保存多端。也就是先保存student,然后保存clazz。

    但是这样会造成一个问题,因为student中会多一个字段cid,但是保存student 的时候我们操作的是对象而不是数据库

    发后台的语句:
     //保存student
     Hibernate: insert into Student (name, sex, age) values (?, ?, ?)  //并没有插入cid的值,这也是为什么student的cid配置不能为null的原因。


     //保存class
     Hibernate: insert into Clazz (name) values (?)
     
     //commit的时候会发送更新语句。
     Hibernate: update Student set cid=? where id=?

    所以我们不建议使用一端来维护多端。所以我们这就出现了反转,把维护的工作交给了多端来维护。保存,修改,删除,都由多端来维护。

    所以在一端我们就可以加入  <set name="student" inverse="true">

    inverse="true"是双向关联的概念,使用了这个,再进行一端维护多段是不能关联cid的。所以就必须用多端维护。

    下面就是双向关联:

     这样,这样进行保存的时候,只能先保存一端然后再保存多端。反之操作cid将不会update,cid也就不会有值。

    反向工程:

    点击finish就可以了.

    关于fetch,以后详细再说。

  • 相关阅读:
    罗杨美慧 20180912-3 词频统计
    罗杨美慧 20190912-2 命令行
    罗杨美慧 20190905-1 每周例行报告
    罗杨美慧 20190905-2 博客作业
    20190919-4 测试,结对要求
    孙晓宇-20190912-1 每周例行报告
    孙晓宇-20180912-3 词频统计
    (第二周)孙晓宇20190912-2 命令行
    孙晓宇20190905-2 博客作业
    孙晓宇20190905-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/RanNing/p/3472257.html
Copyright © 2020-2023  润新知