一对多关联映射利用了多对一关联映射原理:
多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一。
一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多。
总结:由上可以看出,一对多和多对一的映射策略是一样的,只是站的角度不同,维护关系方不同罢了。
1. 单向
java文件:
hbm.xml文件:
测试代码:
保存
加载
2. 双向
相对于上面的单向,只需要修改Student端
java文件:
hbm.xml文件:
注意:在一对多的双向关联关系映射中,我们一般会将关联关系维护权交由多的一方来维护,所以我们需要在一的一方加入关系翻转的属性,如下
总结:
一对多双向关联映射:
1. 在一的一端的集合上使用<key>,在对方表中加入一个外键指向一的一端。
2. 在多的一端采用<many-to-one>
注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段会出错,如果在一的一端维护一对多关联关系,hibernate会发出多于的update语句,所以我们一般在多的一端来维护关联关系。
inverse属性:
inverse主要用在一对多和多对多双向关联关系上,inverse可以被设置到集合标签<set>上,默认inverse为false,所以我们可以从一的一端和多的一端来维护关联关系,如果设置inverse为true,则我们只能从多的一端来维护关联关系,注意:inverse属性只影响数据的存储,也就是持久化,加载没有影响。
inverse和casccade
1. inverse是关联关系的控制方向。
2. cascade是操作上的连锁反应。