Hibernate的关联映射
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、单向关联映射
3、单向N-N关联 单向的N-N关联和1-N关联的持久化类代码 完全相同,控制关系的一端需要一个Set集合属 性,被关联的持久化实例以集合形式存在。 N-N关联必须使用连接表,N-N关联与有连 接表的1-N关联非常相似,只要去掉<many-tomany…/ >元素的unique=“true”属性即可。
一、单向关联映射
2、单向1-1关联
– 有连接表的单向1-1 • 将有连接表的 将有连接表的N-1关联映射中的 关联映射中的<many-to-one…/> 关联映射中的 元素里增加unique=“true”属性即可。 属性即可。 元素里增加 属性即可 • 运行结果如图所示
一、单向关联映射
2、单向1-1关联
– 基于主键的单向1-1 • 1-1的关联可以基于主键关联,基于主键关联的持 的关联可以基于主键关联, 的关联可以基于主键关联 久化类不能拥有自己的主键生成器策略, 久化类不能拥有自己的主键生成器策略,它的主键 由关联类负责生成。 由关联类负责生成。 • 采用基于主键的 关联时,应使用 采用基于主键的1-1关联时 应使用<one-to关联时, one…/>元素来映射关联实体,配置时需指定一个 元素来映射关联实体, 元素来映射关联实体 name属性,其值为关联实体属性的属性名。 属性, 属性 其值为关联实体属性的属性名。
一、单向关联映射
2、单向1-1关联
– 基于外键的单向1-1 • 将无连接表的 将无连接表的N-1关联映射中的 关联映射中的<many-to-one…/> 关联映射中的 元素里增加unique=“true”属性即可。 属性即可。 元素里增加 属性即可 • 运行结果如图所示,addressId列增加了唯一性约 运行结果如图所示, 列增加了唯一性约 束。
第6、7讲 Hibernate的关联映射 、 讲 的关联映射
序
• 现实世界中,对象往往很少有孤立存在,比如, 教师往往与被授课的学生存在关联关系,如果得 到一个教师的实例,那么可以得到该教师对应的 全部学生。反之,如果得到一个学生实例,也应 该可以得到该学生所对应的教师。 • 这种实例之间的相互访问就是关联关系。 • 关联关系大致分:单向和双向两种。
一、单向关联映射
• 单向关联:
单向1-1 单向 单向1-N 单向 单向N-1 单向 单向N-N 单向
一、单向关联映射
1、单向N-1关联
N-1关联关系非常常见,父子关系也是N-1关联, 单向的N-1关联只能从N的一端访问1的一端。 单向N-1关系,比如多个人对应同一个住址,只能 从“人”一端找到对应的“住址”,不用关心某个住 址的全部用户。
一、单向关联映射
3、单向N-N关联 N-N的映射文件Person.hbm.xml
作业
• 分析以下三个表,通过单向关联方式加以实现。
二、双向关联映射
• 双向关联:
双向1-1 双向 双向1-N 双向 双向N-N 双向
作业
一、单向关联映射
3、单向1-N关联
– 无连接表的单向 无连接表的单向1-N – 实例:保存一个 实例:保存一个person对象和两个 对象和两个address对象 对象和两个 对象 – PersonManager.java
一、单向关联映射
3、单向1-N关联
– 有连接表的单向 有连接表的单向1-N – 实例:保存一个 实例:保存一个person对象和两个 对象和两个address对象 对象和两个 对象 – Person.hbm.xml
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 有连接表N-1关联 • 需要显示使用 需要显示使用<join…/>元素,该元素用于强制将一 元素, 元素 个类的属性映射到多张表中, 个类的属性映射到多张表中,通常也用于强制使用 连接表。 连接表。 • 使用 使用<join…/>映射连接表时还需要外键关联,应在 映射连接表时还需要外键关联, 映射连接表时还需要外键关联 配置文件中增加<key…/>子元素来映射外键,并为 子元素来映射外键, 配置文件中增加 子元素来映射外键 <join…/>元素增加 元素增加<many-to-one…/>子元素,用 子元素, 元素增加 子元素 于映射N-1的关联实体。 的关联实体。 于映射 的关联实体
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 有连接表N-1关联 • Person.hbm.xml
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 有连接表N-1关联 • 其他文件不变 • 运行演示分析
一、单向关联映射
2、单向1-1关联
– 对于单向的1-1关联,需要在持久化类里为关联实体的 引用属性增加setter和getter方法。 – 从持久化类看,单向1-1和单向N-1没有区别。 – 配置文件非常相似,只需在原有的<many-to-one…/> 元素里增加unique=“true”属性即可,用以表示N的一端 必须唯一。N的一端是唯一,N-1也就变成了1-1关联 。
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 无连接表N-1关联 • Person.hbm.xml
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 无连接表N-1关联 • Address.hbm.xml
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应Leabharlann Baidu一个住址 – 无连接表N-1关联 • 其他配置文件(略) 其他配置文件( • 运行演示分析
一、单向关联映射
3、单向1-N关联 映射很简单,只需将以前用于映射集合元素的 <element…/>元素改为<one-to-many…/>即可。 回顾:以前映射集合元素。
一、单向关联映射
3、单向1-N关联
– 无连接表的单向 无连接表的单向1-N – 实例:保存一个 实例:保存一个person对象和两个 对象和两个address对象 对象和两个 对象 – Person.hbm.xml
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 对Address端而言,不需要关心Person持久化类, Address代码中并没有对Person的访问,因此Address 的映射是基本映射,无须改变。 – 关联方式:无连接表、有连接表
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 无连接表N-1关联 • Person端增加了 端增加了Address属性,该属性不是一个 属性, 端增加了 属性 普通的组件属性,而是引用另一个持久化的类。 普通的组件属性,而是引用另一个持久化的类。 Hibernate使用 使用<many-to-one…/>元素映射 元素映射N-1的 使用 元素映射 的 关联实体,直接使用该元素将会在N的一端的数据 关联实体,直接使用该元素将会在 的一端的数据 表中增加一个外键列,用于参照主表记录。 表中增加一个外键列,用于参照主表记录。 • 这里只需在 这里只需在Person一端的映射文件中增加 一端的映射文件中增加<many一端的映射文件中增加 to-one…/>元素即可。 元素即可。 元素即可
一、单向关联映射
2、单向1-1关联
– 基于主键的单向1-1 • person表将作为从表,主键和主表 表将作为从表, 表将作为从表 主键和主表address里记录 里记录 的主键保持一致。 的主键保持一致。 • Person.hbm.xml
一、单向关联映射
3、单向1-N关联 持久化类需要使用集合属性,1的一端需要访问N的 一端,而N的一端将以集合形式表现。
为了让两个持久化类支持这种关联映射,应在N 的一端的持久化类中增加一个属性【该属性引用1的一 端的关联实体】。
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 代码清单:Person.java
一、单向关联映射
1、单向N-1关联
– 实例:多个人对应同一个住址 – 每个Person单向对应一个地址,因此Person类里增加 了一个Address的引用属性。程序无须从Address访问 Person,因此Address无须增加Person属性。 – Address.java