映射一对多关联关系

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一对多双向关联映射
演示示例: 演示示例: Customer和Order的一对多双向关联映射 示例 和 的一对多双向关联映射
inverse属性 属性
inverse属性 属性
通过将Set元素的 元素的inverse属性设置为 属性设置为true,来提高应用的 通过将 元素的 属性设置为 , 性别,减少不必须的JDBC操作: 操作: 性别,减少不必须的 操作
如何映射一对多关系
如何映射一对多关系
set、key和many-to-one元素: 、 元素: 和 元素
<set name="orders" cascade="save-update"> <key column="customerId" not-null=“true”/> <one-to-many class="o2mm2o.Order" /> </set>
映射一对多双向自身关联关系
以菜单表为例, 以菜单表为例,演示一对多双向自向关联关系
演示示例: 演示示例:映射一对多双向自身关联关系 示例
总结
总结
使用Hibernate,通过简单的配置即可获得对象间关联的 , 使用 能力 常用的关联有one-to-many关联和 关联和many-to-one关联。 关联。 常用的关联有 关联和 关联 根据业务需要确定关联的配置
<set name=“orders” cascade=“save-update” inverse="true"> <key column="customerId" /> <one-to-many class="o2m.Order2" /> </set>
这表明只有many方修改了关联关系,才会生效(也就是执行 方修改了关联关系,才会生效 也就是执行 这表明只有 方修改了关联关系 JDBC操作修改数据库内容,one方修改关联关系,不会修改数据 操作修改数据库内容, 方修改关联关系, 操作修改数据库内容 方修改关联关系 库的内容) 库的内容
删除解除关联关系的对象
通过将Set元素的 元素的cascade属性设置为 属性设置为delete-orphan可以 通过将 元素的 属性设置为 可以 自动删除解除关联的持久化对象(many方) 自动删除解除关联的持久化对象 方
<set name=“orders” cascade=“delete-orphan” inverse="true"> <key column="customerId" /> <one-to-many class="o2m.Order2" /> </set>
演示示例: Customer和Order的一对多双向关联映射 演示示例: 和 的一对多双向关联映射inverse属性的作用 属性的作用 示例 的一对多双向关联映射
级联删除关联的持久化对象
级联删除关联的持久化对象
通过将Set元素的 元素的cascade属性设置为 属性设置为delete可以级联删 通过将 元素的 属性设置为 可以级联删 除关联的持久化对象
<set name=“orders” cascade=“delete” inverse="true"> <key column="customerId" /> <one-to-many class="o2m.Order2" /> </set>
演示示例: 演示示例:级联删除关联的持久化对象 示例
删除解除关联关系的对象
根据业务需要配置单向或双向关联 根据业务需要配置inverse属性和 属性和cascade属性提高应用的属性 根据业务需要配置 属性和 属性提高应用的属性
多对一单向关联映射
多对一单向关联映射
演示示例: 演示示例: Order到Customer的多对一单向关联映射 示例 到 的多对一单向关联映射
一对多(或多对一 双向关联 一对多 或多对一)双向关联 或多对一
一对多(或多对一 双向关联 一对多 或多对一)双向关联 或多对一
我们以客户(Customer)和订单 和订单(Order)的关系为例,分析 的关系为例, 我们以客户 和订单 的关系为例 一下多(订单 对一(客户 订单)对一 客户)单向关联 一下多 订单 对一 客户 单向关联
演示示例: 演示示例:删除解除关联关系的对象 示例
cascade属性总结 属性总结
cascade属性总结 属性总结
cascade属性总的来讲就是用来控制如何操作关联的持久化对象的, 属性总的来讲就是用来控制如何操作关联的持久化对象的, 属性总的来讲就是用来控制如何操作关联的持久化对象的 它的值有如下几类
ቤተ መጻሕፍቲ ባይዱ
什么是关联
什么是关联
关联(association) 关联
关联指的是类之间的引用关系。如果类 与类 关联, 与类B关联 关联指的是类之间的引用关系。如果类A与类 关联,那么被引用 的类B将被定义为类 的属性。 将被定义为类A的属性 的类 将被定义为类 的属性。
public class A{ private B b = new B; public A(){} }
Order
1 0..n id : Long customer : Cust omer orderNumber : String
Customer
id : Long name : String
注意:我们仅仅在 类中定义了Customer类型的属性 注意:我们仅仅在Order类中定义了 类中定义了 类型的属性 customer,因此这是一个 类到Customer类的多对一单向 ,因此这是一个Order类到 类到 类的多对一单向 关联
映射一对多关联关系
回顾
回顾
*.hbm.xml各个元素的作用和常用属性 各个元素的作用和常用属性 hibernate的常用内置主键生成器 的常用内置主键生成器
数据库提供的主键生成机制: 数据库提供的主键生成机制:identity、sequence 、 外部程序提供的主键生成机制: 外部程序提供的主键生成机制:increment ,hilo 其它: 其它:native,assigned ,
关联的分类:关联可以分为一对一、一对多、 关联的分类:关联可以分为一对一、一对多、和多对多关联 关联是有方向的
持久化对象和临时对象概念
持久化对象和临时对象概念
临时对象是指刚通过new关键字创建的对象,在数据库中 关键字创建的对象, 临时对象是指刚通过 关键字创建的对象 没有与此对象对应的记录 持久化对象是指数据库中有与此对象对应的记录的
hibernate的映射类型 的映射类型
本章目标
本章目标
理解什么是对象之间的关联关系 掌握一对多关联关系的映射
多对一单向关联 一对多(或多对一 或多对一)双向关联 一对多 或多对一 双向关联 一对多(或多对一 或多对一)双向自身关联 一对多 或多对一 双向自身关联 inverse和cascade属性设置 和 属性设置
all
• all=save-update操作 操作+delete操作 操作 操作
delete-orphan
• 删除所有和当前对象解决关联关系的对象
all-delete-orphan
• all-delete-orphan=all操作 操作+delete-orphan操作 操作 操作
映射一对多双向自身关联关系
<set>元素表明 元素表明Customer类的 类的orders属性为 属性为java.util.Set集合,用来包 集合, 元素表明 类的 属性为 集合
含被关联的Order对象 对象 含被关联的 • name属性:用来保存关联的持久化对象属性的名称 此属性的类型必 属性: 属性 用来保存关联的持久化对象属性的名称(此属性的类型必 须是接口,本例中必须是Set,而不能是 须是接口,本例中必须是 而不能是HashSet) 而不能是 • cascade属性:当值为 属性: 表示保存或更新当前对象时(即 属性 当值为save-update表示保存或更新当前对象时 即 表示保存或更新当前对象时 执行insert或update语句时 ,会级联保存或更新与它关联的对象 语句时), 执行 或 语句时 <key>元素:表明 元素: 表通过外键customerId引用 引用Customers表 元素 表明Order表通过外键 表通过外键 引用 表 <one-to-many>元素的 元素的class属性指定了一对多关系中多方的类名,也就 属性指定了一对多关系中多方的类名, 元素的 属性指定了一对多关系中多方的类名 是orders集合中存放的是一组什么类型的对象 集合中存放的是一组什么类型的对象 一对多双向关联映射
多对一单向关联
多对一单向关联
我们以客户(Customer)和订单 和订单(Order)的关系为例,分析 的关系为例, 我们以客户 和订单 的关系为例 一下多(订单 对一(客户 订单)对一 客户)单向关联 一下多 订单 对一 客户 单向关联
一个客户能发出多个订单, 一个客户能发出多个订单,而一个订单只能属于一个客户
none
• 保存,更新或删除当前对象时,忽略其它关联的对象 保存,更新或删除当前对象时,
save-update
• 保存、更新时级联保存所有的临时对象,并且级联更新关联的游离对象 保存、更新时级联保存所有的临时对象,
delete
• 通过 通过session的delete方法删除当前对象,级联删除关联的对象 的 方法删除当前对象, 方法删除当前对象
如何映射多对一关联关系
如何映射多对一关联关系
many-to-one元素: 元素: 元素
<many-to-one name="customer“ class=“m2o.Customer" cascade="save-update"> <column name="customerId" not-null="true“/> </many-to-one> name属性:用来保存关联的持久对象的属性的名称 属性: 属性 class属性:关联的持久化类的类名 属性: 属性 cascade属性:当值为 属性: 表示保存或更新当前对象时(即执行 属性 当值为save-update表示保存或更新当前对象时 即执行 表示保存或更新当前对象时 insert或update语句时 ,会级联保存或更新与它关联的对象 或 语句时), 语句时 <column>元素用来指定查询关联的持久化类的外键 对于关联的持久化 元素用来指定查询关联的持久化类的外键(对于关联的持久化 元素用来指定查询关联的持久化类的外键 类而言,这个外键的值就是它的主键也就是OID) 类而言,这个外键的值就是它的主键也就是
一个客户能发出多个订单, 一个客户能发出多个订单,而一个订单只能属于一个客户
Customer
id : Long name : String orders : Set 1 0..n
Order
id : Long c ustomer : Cust omer orderNumber : String
注意:我们不仅在在Order类中定义了 注意:我们不仅在在 类中定义了Customer类型的属性 类型的属性 类中定义了 customer;还在 类中定义了一个Set集合 用来包含关 集合(用来包含关 ;还在Customer类中定义了一个 类中定义了一个 集合 联的Order对象 ,因此这是一个 对象),,因此这是一个Order类到 类到Customer类(或者是 联的 对象 类到 类 或者是 Customer类到 类到Order类)的一对多 或多对一 双向关联 的一对多(或多对一 类到 类 的一对多 或多对一)双向关联
相关文档
最新文档