5关联映射
5.1实体关联关系
(1)关联关系
通过一个对象持有另一个对象的实例
(2)泛化关系
通过对象之间的继承方法来实现
(3)类与类之间最普遍的关系就是关联关系,在UML 语言中,关联是有方向的。
5.2单向多对一关联
多对一关系使用外键参照,单向多对一关联是最常见的单向关联关系。
关联关系在映射文件(hbm.xml):
(1)many的一端应持有one的一端的对象(引用)(2)映射文件体现多对一,代码如下:
映射文件例:
<hibernate-mapping>
<class name="org.ijob.bean.Resume" table="ijob_resume">
<!—省略主键映射及属性映射 -->
<!-- 多对一关联 -->
<many-to-one name="seeker" class="org.ijob.bean.Seeker"> 1
<column name="seeker_id"></column> 2
</many-to-one>
</class>
</hibernate-mapping>
1、name为属性名,class为“one”端类名
2、外键列列名
5.3单向一对多关联(one-to-many)
(1)one的一端应持有many端的对象集合
(2)映射文件体现一对多,代码如下:
映射文件例:
<hibernate-mapping>
<class name="org.ijob.bean.Seeker" table="ijob_seeker">
<!—省略主键映射及属性映射 -->
<set name="resumes" > 1
<key column="seeker_id"></key> 2
<one-to-many class="org.ijob.bean.Resume"/> 3
</set>
</class>
</hibernate-mapping>
代码解析:
1、set集合节点适用于配置一对多关联关系, name属性指定one的一端对应属性名。
2、外键列列名。
3、class属性指定many端的全限定类名。
5.4双向一对多/一对一关联
(1)双向一对多特别简单,就是同时配置了单向的一对多和单向的多对一。
(2)一对一关联是特殊的一对多关联,many的一端是唯一的而不是多个。
<many-to-one name="resume" class="org.ijob.bean.Resume" column="resume_id" unique="true" />
<one-to-one name="purpose" class="org.ijob.bean.Purpose" property-ref="resume" />
5.5多对多关联
(1)将多对多转换成两个一对多
为中间表建立实体类及映射文件,两个端点和中间端分别建立双向一对多关联
(2)
如果中间表是联合主键:
<!-- 联合主键 -->
<composite-id>
<key-many-to-one name=“**” column=“***" class=“***" ></key-many-to-one>
<key-many-to-one name=“**” column=“**" class=“**" ></key-many-to-one>
</composite-id>
5.6cascade和inverse
cascade
(1)cascade="save-update",意味着对某个对象执行save或update时,其关联对象会自动被持久化。可用于set标签和many-to-one标签
(2)cascade=“delete”,级联删除关联集合,用于set标签
(3)cascade其他选项
1、none:默认,无级联。
2、all:对应save/update/delete操作。
我们在配置级联关系时,通常将cascade设置为save-update,删除的时候最好使用手工控制。
inverse
(1)inverse属性用于one-to-many节点,默认为false。
(2)若设置为true,可强制由many的一端来做实际的外键关系维护者,即便代码是从one的一端往集合中添加数据。
本文详细介绍了ORM中不同类型的关联映射,包括单向多对一、单向一对多、双向一对多/一对一以及多对多关联,并提供了具体的Hibernate映射文件示例。
3万+

被折叠的 条评论
为什么被折叠?



