二、关系映射
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/extra
*
lazy的概念:
在真正使用某个对象的时候才真正的去创建,对于hibernate才会真正的发出sql语句去加载该对象
hibernate的lazy策略必须在session打开状态下有效
lazy策略在集合上可以取值:true/false/extra
hibernate在单端关联上的lazy特性
(3)关于inverse属性:
*可以用在一对多和多对多双向关联上
*默认为false,表示本端可以维护关系;
如果为true,则本端不能维护关系,会交给另一端维护关系,本端失效.
所以一对多关联映射我们通常在多的一端维护关系,让一的一端失效,所以设置inverse为true
inverse和cascade属性
*inverse是控制方向上的反转,只影响存储
*cascade是操作上的连锁反应