`

收藏-O/R MAPPING方法小结

阅读更多

(一)对象之间的关系:

  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 .关联

  21 一对一

  一般有两种策略:

  策略1 :唯一的外键

  <many-to-one>+unique="true" ( 唯一的外键)

  <one-to-one>

  策略2 :共享主键

  <one-to-one>

  <one-to-one><constrained="true"> ( 既是主键又是外键)

  注意:生成方式需要用:foreign

  22 一对多(无需多说)

  23 多对一(无需多说)

  24 多对多

  策略1A,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 没有。这是因为这样:策略1c 表不能有自己的东西。而策略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...

    O/R_Mapping思想

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

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

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

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

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

    Hibernate O/R Mapping 入门工程包

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

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

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

    o-x-mapping测试

    "o-x-mapping"通常指的是对象到XML的映射,它允许我们将Java对象转换为XML文档,或者从XML文档中反向创建Java对象。这种映射机制是许多框架和库的核心功能,如JAXB(Java Architecture for XML Binding)和XStream等...

    Tornado O/R Mapping Engine-开源

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

    Landslide-susceptibility-mapping-main

    https://github.com/scar-on/Landslide-susceptibility-mapping (scar-on/Landslide-susceptibility-mapping)

    advanced-mapping-tool:Dataninja 的另一个高级映射工具

    高级映射工具 Dataninja 的一个非常先进的...cp dataninja-advanced-mapping-tool.conf.sample.js dataninja-advanced-mapping-tool.conf.js cp dataninja-advanced-mapping-tool.custom.sample.css dataninja-advance

    SANGFOR_NGAF_6.8_DNS-Mapping配置指导.pdf

    11. DNS-Mapping 配置方法:文档详细介绍了 DNS-Mapping 的配置方法,包括基本配置、进阶配置和高级配置等。 12. 测试方法:文档提供了详细的测试方法,帮助用户验证 DNS-Mapping 的配置结果。 13. 注意事项:在...

    动态加载图片

    &lt;mime-mapping&gt; &lt;extension&gt;htm&lt;/extension&gt; &lt;mime-type&gt;text/html;charset=gb2312&lt;/mime-type&gt; &lt;/mime-mapping&gt; &lt;mime-mapping&gt; &lt;extension&gt;html&lt;/extension&gt; &lt;mime-type&gt;text/html;charset=gb2312&lt;/mime-...

    WEB-INF目录下的jsp页面如何访问

    从给定的信息来看,似乎...通过上述方法之一,可以实现在不影响安全性的情况下访问这些页面。在实际开发中,建议使用现代Web框架提供的功能来处理这些需求,这不仅可以简化开发流程,还能确保应用的安全性和可维护性。

    jsoup jar包

    &lt;filter-mapping&gt; &lt;filter-name&gt;sitemesh&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; (2)标签库配置: &lt;taglib-uri&gt;sitemesh-decorator&lt;/taglib-uri&gt; &lt;taglib-location&gt; /WEB-INF/tld/...

    Jetson-TX2-GPIO-mapping.xlsx

    Jetson-TX2-GPIO-mapping.xlsx

    Spring MVC 框架应用实例

    &lt;filter-mapping&gt; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt; &lt;/filter-mapping&gt; &lt;servlet-name&gt;ideawu&lt;/servlet-name&gt; &lt;servlet-class&gt; org.springframework.web...

    Mapping Objects to Relational Databases O-R Mapping In Detail.doc

    **O/R Mapping(对象关系映射)详解** 在大多数现代商业应用开发项目中,开发者通常使用Java或C#等面向对象的技术构建应用程序软件,并利用关系型数据库存储数据。虽然也有用过程式语言如COBOL编写的应用,或者使用...

    MAPPING Hibernate方法小结.doc

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

    一個好好的 hibernate 介紹

    - 采用 O/R Mapping 工具后,可以简单地创建一个用户对象并调用相应的保存方法,工具会自动将对象状态转化为 SQL 语句执行。这样减少了代码量,简化了开发过程。 - **示例 3**:新增部门(使用 O/R Mapping) - ...

Global site tag (gtag.js) - Google Analytics