- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
映射一对多关联关系 回顾 *.hbm.xml各个元素的作用和常用属性 hibernate的常用内置主键生成器 数据库提供的主键生成机制:identity、sequence 外部程序提供的主键生成机制:increment ,hilo 其它:native,assigned hibernate的映射类型 本章目标 理解什么是对象之间的关联关系 掌握一对多关联关系的映射 多对一单向关联 一对多(或多对一)双向关联 一对多(或多对一)双向自身关联 inverse和cascade属性设置 什么是关联 关联(association) 关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。 public class A{ private B b = new B; public A(){} } 关联的分类:关联可以分为一对一、一对多、和多对多关联 关联是有方向的 持久化对象和临时对象概念 临时对象是指刚通过new关键字创建的对象,在数据库中没有与此对象对应的记录 持久化对象是指数据库中有与此对象对应的记录的 多对一单向关联 我们以客户(Customer)和订单(Order)的关系为例,分析一下多(订单)对一(客户)单向关联 一个客户能发出多个订单,而一个订单只能属于一个客户 注意:我们仅仅在Order类中定义了Customer类型的属性customer,因此这是一个Order类到Customer类的多对一单向关联 如何映射多对一关联关系 many-to-one元素: name属性:用来保存关联的持久对象的属性的名称 class属性:关联的持久化类的类名 cascade属性:当值为save-update表示保存或更新当前对象时(即执行insert或update语句时),会级联保存或更新与它关联的对象 column元素用来指定查询关联的持久化类的外键(对于关联的持久化类而言,这个外键的值就是它的主键也就是OID) 多对一单向关联映射 一对多(或多对一)双向关联 我们以客户(Customer)和订单(Order)的关系为例,分析一下多(订单)对一(客户)单向关联 一个客户能发出多个订单,而一个订单只能属于一个客户 注意:我们不仅在在Order类中定义了Customer类型的属性customer;还在Customer类中定义了一个Set集合(用来包含关联的Order对象),,因此这是一个Order类到Customer类(或者是Customer类到Order类)的一对多(或多对一)双向关联 如何映射一对多关系 set、key和many-to-one元素: set元素表明Customer类的orders属性为java.util.Set集合,用来包含被关联的Order对象 name属性:用来保存关联的持久化对象属性的名称(此属性的类型必须是接口,本例中必须是Set,而不能是HashSet) cascade属性:当值为save-update表示保存或更新当前对象时(即执行insert或update语句时),会级联保存或更新与它关联的对象 key元素:表明Order表通过外键customerId引用Customers表 one-to-many元素的class属性指定了一对多关系中多方的类名,也就是orders集合中存放的是一组什么类型的对象 一对多双向关联映射 inverse属性 通过将Set元素的inverse属性设置为true,来提高应用的性别,减少不必须的JDBC操作: 这表明只有many方修改了关联关系,才会生效(也就是执行JDBC操作修改数据库内容,one方修改关联关系,不会修改数据库的内容) 级联删除关联的持久化对象 通过将Set元素的cascade属性设置为delete可以级联删除关联的持久化对象 删除解除关联关系的对象 通过将Set元素的cascade属性设置为delete-orphan可以自动删除解除关联的持久化对象(many方) cascade属性总结 cascade属性总的来讲就是用来控制如何操作关联的持久化对象的,它的值有如下几类 none 保存,更新或删除当前对象时,忽略其它关联的对象 save-update 保存、更新时级联保存所有的临时对象,并且级联更新关联的游离对象 delete 通过session的delete方法删除当前对象,级联删除关联的对象 all all=save-update操作+delete操作 delete-orphan 删除所有和当前对象解决关联关系的对象 all-delete-orphan all-delete-orphan=all操作+delete-orphan操作 映射一对多
文档评论(0)