`
mars李
  • 浏览: 50249 次
  • 性别: Icon_minigender_1
  • 来自: 柳州
社区版块
存档分类
最新评论

O/R MAPPING(Hibernate)方法小结

阅读更多
一.对象之间的关系:
  
  1.依赖:
  
  依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系,并且是短期的。我们的过程与对象往往依赖于我们的实体域对象。如在struts的action中调用模型层的方法。
  
  2.关联
  
  它使一个类指到另一个类的属性。长期的
  
  3.聚合
  
  聚合关系是关联关系的一种,是强的关联关系。聚合是整体和部分之间的关系。
  
  4.组合
  
  也叫合成关系,组成关系是关联关系的一种,是比聚合关系强的关系。对象负责代表部分的对象的生命周期。
  
  注:既然聚合,组合关系属于关联关系,那么如何区分一般关联关系,聚合关系和组合关系呢?
  
  一般关联:只要一个对象联系到另外一个对象就形成了关联关系。如:人和他的猫,黑豹乐队和窦唯,PC机和显示器。
  
  聚合关系:一种强关联关系,它要求有部分和整体的关系,并且没有了整体部分也可以独立存在。在上面三个例子中人和它的猫显然没有部分和整体的关系,所以只能是一般的关联关系。而黑豹乐队和窦唯,窦唯等人组成了黑豹乐队即:窦唯和黑豹是整体和部分的关系。
  
  而窦唯脱离了黑豹(早就离开了)更或者黑豹不存在了那么窦唯仍然可以以音乐人的身份存在(即对象仍然可以独立存在)所以它属于聚合关系。组成关系是可以共享的。(窦唯也可以加入其他乐队)。
  
  组合关系:一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期,组成关系是不能共享的。如:PC机和显示器的关系。
  
  我觉得:如果两个实体是整体和部分的关系,那么它们到底是聚合还是组合,这取决于你的需求。比如说:PC机和显示器的关系,如果你的系统中,显示器脱离了PC机就不存在意义了,也可以说:所有显示器的访问都是通过PC机进行的,那么你可以把关系设定为组合(如你在为一个只买品牌机的代理商作系统你可能是可以这么作的)。
  
  如果你的显示器脱离的PC机仍然可以独立存在,也就是说在系统中可以直接访问显示器对象,那么你可以将关系设为聚合(如你在为一个买散件的代理商作系统你可能是可以这么作的)
  
  5.继承
  
  这个我不想多讲了,用过面向对象的语言都应该知道。
  
  二.关系数据库的关系
  
  一对一
  
  一对多
  
  多对一

  
  多对多
  
  三.o/r mapping策略
  
  1.继承:
  
  对于继承关系一般有三种策略:
  
  策略1继承树的每个类对应一个表
  
  <joined-subclass >//共享主键
  
  策略2继承树的根类对应一个表
  
  <discriminator ><subclass >//需要添加一个识别字段
  
  策略3继承树的叶子类对应一个表,不支持多态查询
  
  2.关联
  
  2.1 一对一
  
  一半有两种策略:
  
  策略1:唯一的外键
  
  <many-to-one>+unique="true" (唯一的外键)
  <one-to-one>
  
  策略2:共享主键
  
  <one-to-one>
  <one-to-one><constrained="true"> //既是主键又是外键
  
  注意:生成方式需要用:foreign
  
  2.2 一对多(无需多说)
  
  2.3 多对一(无需多说)
  
  2.4 多对多
  
  策略1:A,B表多对多的关系需要引入C表。
  
  C表中的所有属性即为主键又为外键分别参照A,B两表。
  
  C表中不可以有其他属性

  
  策略2:将多对多拆分成两个一对多:
  
  A,B对象多对多的关系需要引入C对象。使得A,B两对象与C对象的关系为一对多。对应数据库中:A,B表多对多的关系需要引入C表。A,B两表与C表的关系为一对多。
  
  C表又自己的主键
  
  C表中又非主键的外键分别参照A,B两表。
  
  C表中不可以有其他属性
  
  如;学生 ,课程为多对多的关系 那么引入学生选课。
  
  注意:策略1和策略2的不同在于:策略2引入了新的对象而策略1没有。这是因为这样:策略1的c表不能又自己的东西。而策略2有。
  
  2.5 其他
  
  上面说过:聚合与组成是关联的一种所以他们也符合以上策略。
  
  特别的:当用到组合关系的是否我们可用用到hibernate的"组件"
  
  <component>
  
  由于"组件"它完全可以满足组成关系的强关联。
  
  3.依赖
  
  一般不在实体域对象中体现。
  
  O/R MAPPING (HIBERNATE)方法小结 (补充内容):
  
  另外我看到了一种"键关联"的方法,感觉很有道理。我理解了一下总结如下:
  
  1.一般关联:
  
  这种方法对于一般的关联总是引入c表(另外的一张表)仅仅表示关系。
  
  C表的主键有分别指向A,B两表(外键)。当指向一方的外键unique="true"即唯一,那么这一方为"一",反之为"多"的一方。这样就可以形成一般的关联关系。但是注意的是:c表不映射为对象。C表也没有自己的属性。
  
  2.聚合和组成
  
  当实体A的非主键列中有一个引自实体B的时候,这种关系是B聚合A。如果这种引用是强制性的,则是合成关系,否则为聚合关系。是否为强制性,只需要将引用列设为非空即可;
  
  3.继承
  
  当实体A的主键引用自实体B的时候(即为外键),那么A继承 B。
  
  总结:我觉得O/RM的方法有很多,我们可以看到"按外键"的方法思路很清晰。但是它在解决一般的关联的时候总是引入另外一张表这样势必影响效率。另外,既然聚合和组合是关联的一种那么即使是组合关系我也把它看成一般关联,也不算错的。
  
  关系数据库一开始就不是为了面向对象的语言服务的,所以我们在这里映射无论那种方法似乎都不能说是完全的,正确无误完成了O/RM。所以我觉得一切都要看我们的项目需求。因地制宜!
分享到:
评论

相关推荐

    Macrobject NObject O/R Mapping 框架

    NObject O/R Mapping 框架包含了 OQL.NET,一套基于 C# 和 VB.NET 等原生 .NET 语言的强类型对象查询语言 (OQL, Object Query Language) 使您甚至不需要写一行 SQL 语句。 ??NObject O/R Mapping 框架能帮您减少 30...

    hibernate如何用O/R Mapping框架来实现我们的数据层

    ### Hibernate与O/R Mapping框架详解 #### 一、O/R Mapping概述 O/R Mapping(Object-Relational Mapping)即对象关系映射,是一种程序技术,用于将对象模型表示的应用程序对象与关系数据库中的表进行相互转换。在...

    O/R_Mapping思想

    O/R_Mapping思想与ADO.NET 基于.NET的Web应用框架的设计与实现 将对象映射到关系数据库——对象/关系映射(O/R_Mapping)详解 面向对象设计中的O/R映射架构

    泛型、反射 实现 O/R mapping 示例

    在Java编程语言中,O/R Mapping(对象关系映射)是一种技术,用于将数据库中的关系数据映射到对象模型上,使得开发人员可以更方便地处理数据,而无需直接操作SQL语句。在这个示例中,我们将探讨如何利用泛型和反射来...

    Hibernate O/R Mapping 入门工程包

    本入门工程包提供了使用XML和Annotation两种方式来实现Hibernate O/R Mapping的示例,旨在帮助初学者快速掌握其基本原理和实践方法。 首先,让我们了解什么是O/R Mapping。O/R Mapping是将数据库中的表格记录映射为...

    MAPPING Hibernate方法小结.doc

    【MAPPING Hibernate方法小结】 Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式操作数据库。以下是对Hibernate中几种关键概念的详细解释: 1. **对象之间的关系**: - **...

    MJDU v6.0 及使用教程(注解+反射+XML+O/R Mapping+R/O Mapping)

    组件出版于 2012 年末横空出世,由于不会炒作,...我才发现原来在 2013 年时上传的 0.04 版本是不带 OR/RO Mapping 机制的。。。 想了想,还是补上 v6 这个带 OR/RO Mapping 机制的版本吧,虽然是同一时期的产物。

    Tornado O/R Mapping Engine-开源

    **Tornado O/R Mapping Engine 开源详解** Tornado O/R Mapping Engine,简称为Tornado/DB,是一款基于Java平台的对象关系映射(Object-Relational Mapping,ORM)工具。ORM技术的主要目标是通过将数据库中的数据与...

    Hibernate 离线的配置方法(hibernate-mapping-3.0.dtd)

    因为Hibernate在读出hbm.xml文件时需要通过网络读取到hibernate-mapping-3.0.dtd 文件。 如果没有网络不能正常工作。 所以提供上述文件。 以及hibernate-mapping-3.0.dtd,hibernate-configuration-3.0.dtd提供下载...

    hibernate-mapping-3.0.dtd

    hibernate-mapping-3.0.dtd 配置后,就会在xml中进行提示

    一個好好的 hibernate 介紹

    综上所述,通过 Hibernate 这样的 O/R Mapping 工具,开发人员可以在提高生产力的同时确保代码质量和可维护性,尤其是在处理复杂的数据库操作时更为显著。此外,通过使用 Hibernate,可以更好地隔离业务逻辑层与数据...

    hibernate-mapping参数详解

    ### Hibernate Mapping 参数详解 在 Hibernate 中,为了将 Java 对象映射到数据库表,并实现对象关系映射(ORM),开发者需要定义一系列配置属性来指导 Hibernate 如何进行转换。本文将详细解析 `hibernate-mapping...

    Hibernate3 学习笔记.ppt

    在Hibernate中,O/R Mapping允许开发者以面向对象的方式来操作数据库,而无需关心底层的SQL语句。这极大地提高了开发效率和代码的可维护性。通过元数据(如XML或注解),开发者可以定义对象类和数据库表之间的映射...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    hibernat培训.ppt

    本讲座主要围绕Hibernate这一强大的对象/关系映射(O/R Mapping)框架展开,旨在帮助学员理解O/R Mapping原理,掌握Hibernate的使用,并能够运用到实际项目开发中。适合熟悉Java、SQL、JDBC,具备面向对象编程经验的...

Global site tag (gtag.js) - Google Analytics