第13章复杂映射关系•本章将介绍几种复杂的映射关系:关联关系映射、集合类的映射、组件映射和继承关系映射
与前一章基础映射都是针对单个类不同,这些映射都是涉及两个或者两个以上的类,除了映射类本身与数据库表之间的关系外,还要在映射文件中表达类与类之间的关系
1关联关系映射•Hibernate中的关联(Association)映射主要有3种:一对一关联、一对多(或多对一)关联、多对多关联
每种关联都可以分为单向和双向两种
关联关系映射通常情况是最难配置正确的
在这个部分中,本节将从单向关系映射开始,然后考虑双向关系映射,最后介绍一个完整的实例
1多对一(manytoone)•单向many-to-one关联是最常见的单向关联关系
如图所示,类与类之间是多对一的关系
2一对一(onetoone)•一对一的关联分为外键关联和主键关联
•(1)外键关联:基于外键关联的单向一对一关联和单向多对一关联几乎是一样的
唯一的不同就是单向一对一关联中的外键字段具有唯一性约束
•(2)主键关联:基于主键关联的单向一对一关联通常使用一个特定的id生成器
这里的关联关系是定义在Address类的映射文件中,在辅表的one-to-one的属性里要加constrained="true"表示受到约束
3一对多(onetomany)•基于外键关联的单向一对多关联是一种很少见的情况,并不推荐使用
此时的Person包含一个addresses字段,这个字段是一个Address类的集合
•publicclassPerson{•//一对多实现,包含一个集合类属性•privateSetaddresses=newHashSet();•publicSetgetAddresses(){•returnaddresses;•}•publicvoidsetAddresses(Setaddresse