8 对象关系映射
8.1 Introduction
建立域模型和关系数据模型有着不同的出发点:
- 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程
- 在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度
Hibernate 把持久化类的属性分为两种:
- 值(value)类型: 没有 OID, 不能被单独持久化, 生命周期依赖于所属的持久化类的对象的生命周期(没有hbm.xml配置文件)
- 无法直接用 property 映射 值类型(自定义对象类型) 属性
- Hibernate 使用
元素来映射组成关系, 该元素表名 pay 属性是 Worker 类一个组成部分, 在 Hibernate 中称之为组件
参考:
<project-name>/src/main/java/cn.jxzhang.hibernate/entities/Programmer.java
<project-name>/src/main/java/cn.jxzhang.hibernate/entities/Programmer.hbm.xml
<project-name>/src/main/java/cn.jxzhang.hibernate/entities/Salary.java
8.2 Unidirectional associations
8.2.1 Many-to-one
A unidirectional many-to-one association is the most common kind of unidirectional association.
- 单向 n-1 关联只需从 n 的一端可以访问 1 的一端
- 域模型: 从 Order 到 Customer 的多对一单向关联需要在Order 类中定义一个 Customer 属性, 而在 Customer 类中无需定义存放 Order 对象的集合属性
- 关系数据模型:ORDERS 表中的 CUSTOMER_ID 参照 CUSTOMER 表的主键
- 显然无法直接用 property 映射 customer 属性
- Hibernate 使用
元素来映射多对一关联关系
当前内容版权归 chocolate213 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 chocolate213 .