1.多对一关联映射(many-to-one)
在多的一端加入<many-to-one>标签
会在多的一端加入一个外键指向多的一端,外键由<many-to-one>的column属性指定
级联:表的连锁操作
cascade:all none save-update delete
2.一对一关联映射(one-to-one)
一对一关联映射有两种策略:
1.主键关联:让两个对象具有相同的主键,(即是主键又是外键)
2.唯一外键:在多对一关联映射的基础上,外键加上唯一约束
一对一主键关联映射(单向关联)
<id name="id">
<generator class="foreign">
<param name="property">关联对象属性</param>
</generator>
</id>
<one-to-one name="关联对象属性" constrained="true">
Hibernate加载关联对象,默认是根据主键加载,constrained="true",表示当前主键上有一个约束,当前主键同时作为外键参照了关联对象
一对一关联映射,默认cascade属性
一对一主键关联映射(双向关联)
在另外一端加入相应关联对象的属性,并在其映射文件中加入<one-to-one>标签,设置如何加载关联对象,默认根据主键加载。
一对一唯一外键关联映射(单向关联)
<mony-to-one>标签中的unique属性设为true,即在外键上增加了唯一约束,没有默认cascade属性。
一对一唯一外键关联映射(双向关联)
在另外一端加入相应关联对象的属性,并在其映射文件中加入<one-to-one>标签,设置如何加载关联对象,默认根据主键加载。但两个对象采用的是外键关联,所以需要设置property--ref属性,<one-to-one property="关联对象属性">
3.一对多关联映射<one-to-many>
在对象模型中,一对多关系采用集合来表示
多对一关联映射和一对多关联映射,都是在多的一端加入一个外键指向一的一端,只是站的角度不同。
单向关联:
<set name="关联对象属性">
<key column="列名">
<one-to-many class="关联对象的完整类名">
</set>
在一的一端维护关系的缺点:
在外键上添加非空约束,则无法保存,需要upadte
双向关联:
在多的一端采用<many-to-one>(<key>标签的column属性值必须与<many-to-one>中的column属性值保持一致)
由于在一的一端维护关系有缺点,所以我们在多的一端维护
在<set>标签中设置inverse="true",使得我们只能从多的一端进行维护,在一的一端维护时他会反转给多的一端维护,不会在发出多余的update语句。
4.多对多关联映射<many-to-many>
关系模型中多对多关系会生成中间表
单向关联:
<set name="关联对象属性" table="表名">
<key column="列名">
<many-to-many class="关联对象的完整类名" column="列名">
</set>
双向关联:
在另一端同样加入,<set>中table的值与另一端<set>中table的值一致,<key>中column的值与与另一端中<many-to-many>中column的值一致
<set name="关联对象属性" table="表名">
<key column="列名">
<many-to-many class="关联对象的完整类名" column="列名">
</set>