学生和班级的例子来讲,多个学生能够对应一个班级。数据库
1.站在学生角度来讲,学生就是多端。那么咱们能够经过多对一来维护2者的关系。fetch
2.站在班级的角度来讲,班级就是一端。那么咱们能够经过一对多啦维护2者的关系。3d
3.咱们也能够双向关联二者的关系。(这个要牵涉到了反转)对象
不管是多对一仍是一对多,最终生成的数据库的表中,都会在多的一端增长了一个外键来关联一的一端。blog
首先先站在学生的角度上 多对一:ci
最终生成的数据库:it
下面是多对一映射中的字段意思:class
一对多中:后台
生成的表结构和多对一 同样。配置
保存的时候,先保存一端,而后保存多端。也就是先保存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,之后详细再说。