Hibernate征途(四)之映射 序
映射是Hibernate中重要的一部分,是使用Hibernate的基础,前几篇博客写的都是如何将关系模型中的数据与对象模型关联起来,是数据的对应;这篇博客要说的是映射,是关系的对应:如何将关系模型中的关系对应到对象模型中及如何在对象模型中建立新的关联。
O与R的映射差异 在说Hibernate中的映射之前,先说一下关系模型中的映射,使用过关系型数据库的都知道,数据的基本对应方式有三种:一对一、一对多、多对多,这点和下面要说的Hibernate中的映射非常类似,但是毕竟O和R只是类似的,而不是相同的,二者还是有差异的。单就这三种对应方式在O和R中,差异来源于关联的方向性:关系模型中,关联是没有方向的,而在对象中关联是有方向的(双向)。在我看来,这种方向性如下图所示:
如上图所示,如果我知道groupId=1,那么我可以知道groupId=1下都有哪些用户;同样,如果我知道用户id,我也可以知道它所在的组,即在主外键模式下,它是双向的。
但在对象模型的上图中,知道用户对象,可以知道它的group对象;但是在知道group对象时,不能知道此group对象都包含在哪些user对象中,即它是有方向的。
映射类型 Hibernate中的映射类型很多,有一对多映射、多对多映射、一对一映射,这三种又可以细分成单向、双向等,除此之外还有组件映射、继承映射、集合映射、复合主键映射等,总的来说不下十种。如果一一罗列,把每种映射都说一遍,我觉得意义不大,所以又按照它们的相似点,概括的分了下类。通过学习Hibernate,总结得出映射分类的元素抽象为:映射类别、参与对象、关联方向。体现到具体实现上分为:配置文件标签、参与的类、类中的属性。
按照这个分类原则可以将映射分为如下几类:
复用型映射:继承映射和组件映射。映射的目的就是为了建立对象与对象之间的关联,这种关联一方面是为了保证数据的关联性,另一方面也是为了
Hibernate的初衷:用面向对象的思想操作数据。
这篇博客是对映射的概括,下面的博客会按照上面我对映射的分类,分三篇博客说一下映射。