Hibernate关系映射

2014-11-24 10:41:04 · 作者: · 浏览: 0

二、关系映射
1.关联映射
2.继承映射
3.复合主键映射
复合(联合)主键映射:

通常做法是将主键相关字段放到一个单独的类中,这样类是有要求的:

*必须实现序列化接口

*覆盖equals和hashcode方法

(主键,建议使用没有业务语义的,减少业务变更时的修改)










4.组件映射
Component映射

在hibernate中Component映射采用标签即可

Component是某个实体的逻辑组成部分,它与实体类的主要差别在于,它没有oid(对象标识)

Component在DDD(领域驱动设计)中称为值类

采用Component的好处:

实现了对象模型的细粒度划分,复用率高,含义明确,层次分明

对象模型与关系模型的设计恰恰相反,对象模型一般是细粒度的,关系模型一般是粗粒度的













5.集合映射
完成set/ list/ array/ map的映射









--生成主键





















6.其他
(1)关于 cascade(级联)属性
级联的意思是指定两个对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作。

总共可以取值为:all、none、save-update、delete

all-代表在所有的情况下都执行级联操作

none-在所有情况下都不执行级联操作

save-update-在保存和更新的时候执行级联操作

delete-在删除的时候执行级联操作

掌握级联的含义

*级联是对象之间的连锁操作,它只影响添加/删除/修改


(2)关于lazy属性
hibernate的lazy策略

可以使用在:

*标签上,可以取值:true/false

*标签上,可以取值:true/false,需要类增强工具,对字节码进行修改

*/标签上,可以取值:true/false/extra

*/单端关联标签上,可以取值:false/proxy/noproxy

lazy的概念:

在真正使用某个对象的时候才真正的去创建,对于hibernate才会真正的发出sql语句去加载该对象

hibernate的lazy策略必须在session打开状态下有效

上的lazy只影响普通属性

lazy策略在集合上可以取值:true/false/extra

标签上的lazy不会影响集合上的lazy特性,上的lazy只会影响普通属性

hibernate在单端关联上的lazy特性

/单端关联标签上,可以取值:false/proxy/noproxy

标签上的lazy不会影响单端关联对象的lazy策略

(3)关于inverse属性:
*可以用在一对多和多对多双向关联上

*默认为false,表示本端可以维护关系;

如果为true,则本端不能维护关系,会交给另一端维护关系,本端失效.

所以一对多关联映射我们通常在多的一端维护关系,让一的一端失效,所以设置inverse为true





inverse和cascade属性

*inverse是控制方向上的反转,只影响存储

*cascade是操作上的连锁反应