前几篇文章具体讨论了对象模型到关系模型的转化方法,对映射关系做了具体的了解,Hibernate将对象模型转化为对应的关系模型是通过使用对应的映射来完毕的(相同也能够使用注解),对于对象之间的关系的转化则是通过使用对应的标签来实现的,对象模型的关系多样性,决定了关系模型的多样性,本文将会对关系映射做总结,使用关系导图来记忆这些标签的用法。

一、映射大杂烩

Hibernate通过使用不同的标签实现了对象模型向关系模型的转化过程,可是Hibernate提供了多种映射标签,各种标签通过绘制导图,汇总例如以下图:

从对象的角度出发能够把映射分为两种一种是关联关系的映射,第二种是继承关系的映射,当中的组合映射事实上是关联关系的一种特殊情况。由于对象之间有多重性关系,所以对象的关系继续划分的话又会有多对多、一对多、多对一、一对一的关系出现,在对象模型中称为多重性,通过使用相应的标签来实现相应的模型的转化。另外这样的多重性的关系是相互的所以又能够更加仔细的划分为单向性和多向性,单向的关联关系仅仅须要在维护关系的一端加入相相应的标签,双向的映射则须要在对象的两端同一时候加入相应的标签,由于它是两端同一时候维护关系的。最后另一种特殊的组合映射,在对象模型中常常出现,是最强的关联关系,它的映射相对简单。

从关系表的角度出发能够把映射分为集合映射和复合主键映射,集合映射在开发中不常常使用,由于能够通过多重性映射来替代集合映射,能够多了解这样的映射就可以。对于复合主键映射在设计数据库时不提倡使用,设计数据库时讲求主键唯一,而且选择列集合最少的候选键作为主键,可是一定要了解。

二、映射标签

上文对映射做了具体的划分,通过划分来理清映射之间的关系,便于掌握使用,这里具体来讨论不同的映射所使用的标签实现方法。

2.1 对象模型

关联映射经经常使用到,对关联关系做划分的话就会出现不同的映射关系,依照关系的多重性划分了不同的映射集合,详细映射的标签例如以下:

多对多:<many-to-many>

            一对多:<one-to-many>

            多对一:<many-to-one>

            一对一:<one-to-one>

Note:通过使用多重性的映射标签,能够实现对象模型到关系模型的转化。单向的关联仅仅须要在维护关系的一端加入相应的标签,双向关联须要在对象的两端同一时候加入相应的标签。

组合映射<component>,通过使用该标签将一个对象加入到还有一个对象中,生成对应的表结构也会将两个对象合成为一张表,映射简单易懂。

继承映射<subclass>,继承映射也仅仅会生成一张表,在该表中加入对应的类型标签来指明不同的对象的类型,所以须要加入鉴别器<discriminator>标签,并在映射文件里须要加入子类的属性标签。

2.2 关系表

这里分为两种一种是集合映射,同一时候使用Hibernate提供的集合标签来实现映射关系的转换,另外还须要注意集合的不同类型,依据类型来加入不同的子标签。

Set:<set>;Array:<array>;

            Map:<map>,键值成对,须要加入<map-key>子标签;

            List:<list>,对象数据是有序的,须要加入<list-index>/<index>;

            全部的集合映射:<key>标签指明关系表的主键,<element>指明关系表的属性。

另外另一种复合主键映射<composite-id>,指明复合主键的关系,在对象模型中须要将主键对象单独转化为一个类,而且该类要实现序列化接口,同一时候使用该标签将该对象注冊到主对象中。

有关映射的具体用法,请查看笔者的文章:【Hibernate步步为营】:具体解释基本映射

关联映射之多对一

单向关联一对一映射

双向关联一对一映射具体解释(一)/(二)

(一对多映射)之单向关联/双向关联

多对多映射具体解释继承映射

复合主键映射组合映射集合映射

结语

本文是映射的总结性文章,对关系模型和对象模型之间的转化过程做了总结性的讨论,目的是对映射进行分类减轻使用负担,在开发中能够非常快的理解该使用何种类型的映射,事实上相当的简单,可是须要动手去实践,通过实践来加深对映射的理解,并达到灵活运用的目的。

【Hibernate步步为营】--映射合集汇总的更多相关文章

  1. JavaScript常用API合集汇总(一)

    今天这篇文章跟大家分享一些JavaScript常用的API代码,有DOM操作.CSS操作.对象(Object对象.Array对象.Number对象.String对象.Math对象.JSON对象和Con ...

  2. 学习Oracle数据库入门到精通教程资料合集

    任何大型信息系统,都需要有数据库管理系统作为支撑.其中,Oracle以其卓越的性能获得了广泛的应用.本合集汇总了学习Oracle数据库从入门到精通的30份教程资料. 资料名称 下载地址 超详细Orac ...

  3. Struts+Hibernate+Spring面试题合集及答案

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...

  4. Struts+Hibernate+Spring面试题合集及答案(转)

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...

  5. (转)超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  6. 【Oracle教程资源大合集】Oracle数据库免费学习资源汇总

    Oracle的产品非常丰富,各类学习资源也五花八门,本文将介绍Oracle官方的免费教程与风哥整理的Oracle视频教程: 1.Oracle帮助中心 Oracle帮助中心也称为Oracle文档中心,这 ...

  7. Android 自定义View合集

    自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...

  8. 大量Javascript/JQuery学习教程电子书合集

    [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人   不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pd ...

  9. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

随机推荐

  1. [渣译文] SignalR 2.0 系列: SignalR 自托管主机

    原文:[渣译文] SignalR 2.0 系列: SignalR 自托管主机 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.N ...

  2. chrome(转)

    阅读目录 Chrome的隐身模式 Chrome下各种组合键 Chrome的about指令 chrome://accessibility     查看浏览器当前访问的标签 chrome://appcac ...

  3. IE按F12,开发者工具已经在最低点,那么国家就不会出错

    ie浏览器.按F12,开发工具将问世. 没有,试试下面的方法就可以解决: 开开发者工具图标,它会出来缩略图,于缩略图右键点-你可以最大限度地提高.然后选择IE8兼容模式可 版权声明:本文博主原创文章. ...

  4. 【C语言探索之旅】 第二部分第八课:动态分配

    内容简介 1.课程大纲 2.第二部分第八课: 动态分配 3.第二部分第九课预告: 实战“悬挂小人”游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...

  5. UVA 1291 Dance Dance Revolution(DP)

    意甲冠军:跳舞机有一个上5积分,分别central, top, bottom, left, right分,区区足站立还是需要1点物理,从一个单纯的脚central点上须要2点体力,从一个点上移动到相邻 ...

  6. JVM内存结构、垃圾回收那点事(转)

    翻看电脑的文件夹,无意看到了9月份在公司做的一次分享,浏览了一下"婆婆特",发现自己在ppt上的写的引导性问题自己也不能确切的回答出来,哎,知识这东西,平时不常用的没些日子就生疏了 ...

  7. android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自己主动挂断

    开启通话设置视频通话的"来电等待"; 步骤1:測试机和配合机A处于视频通话过程中; 步骤2:配合机B向測试机呼出视频电话; 步骤3:測试机接听配合机B的视频来电; 现象:视频通话过 ...

  8. Could not drop object &#39;student&#39; because it is referenced by a FOREIGN KEY constraint

    1. Find foreign keys SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('Student' ...

  9. Java彻底 - WEB容器的侦听具体解释 ServletContextListener

    WEB容器的侦听器ServletContextListener主要用于监测容器启动和 当破坏需要做一些操作,听众将能够使用此做. ServletContextListener在Spring开始,然后再 ...

  10. Maven+Spring

    Maven+Spring 关于Maven Maven是一个用于项目构建的工具,通过它便捷的管理项目的生命周期.即项目的jar包依赖,开发,测试,发布打包. 做过.NET的人应该会联想到Nuget,是的 ...