映射一对多关联关系

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

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