国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > SSH-Hibernate(二)―映射关系(下)

SSH-Hibernate(二)―映射关系(下)

来源:程序员人生   发布时间:2015-01-16 08:24:00 阅读次数:3034次
    前面已讲了1对1和1对多关系使用Hibernate的映照。还剩下多对多关联和继承映照没有讲,这篇博客是想把这两个1块都总结了。

多对多表关系

    关系型数据库没法直接表达多对多的关系,需要引入中间表之外键关联的方式来表达。以下图:


    多对多单向关联映照

    单向多对多关联映照,是在其中1端加入1个属性保存另外一真个对象集合。而在另外一端则不需要。看到这里你可能会有疑问,这不是和1对多关联1样吗?我们以在Categories1端作为持有者来看。

看到这个类图确切是和1对多关联里的单向映照方式没有区分。我们接着再看它的配置方式:
<class name="Category" table="t_category"> <id name="category_id"> <generator class="native"/> </id> <property name="category_name"/> <set name="items" table="t_catetory_item"> <key column="item_id"/> <many-to-many class="Item" column="item_id"/> </set> </class> <class name="Item" table="t_item"> <id name="item_id"> <generator class="native"/> </id> <property name="item_basePrice"/> </class>

    从配置方式里可以看见和1对多关系映照的区分在于:对应了中间表t_category_item。也就是说category持有的item不是直接持有,而是通过了中间的关系去对应持有的对象有甚么。而1对多关联由于其中1端来讲是唯1的,则可以直接持有。

    多对多双向关联

     双向关联就是两端都持有对方,看过了1对多的双向和前面的单向多对多应当很容易理解了。这里就不再多说,看看类图和配置吧。
         
<class name="Category" table="t_category"> <id name="category_id"> <generator class="native"/> </id> <property name="category_name"/> <set name="items" table="t_catetory_item"> <key column="item_id"/> <many-to-many class="Item" column="item_id"/> </set> </class> <class name="Item" table="t_item"> <id name="item_id"> <generator class="native"/> </id> <property name="item_basePrice"/> <set name="categories" table="t_catetory_item"> <key column="category_id"/> <many-to-many class="Item" column="category_id"/> </set> </class>

继承映照

    继承关系的映照呢看上去和之前的好像很不同,这里为了帮助理解需要说明1点。之前我们讨论映照关系都是从关系型数据库的角度动身,以类之间的关系去表达数据之间的关系。这在理解上没有甚么问题,但是放在继承映照里就有问题了,由于数据库中其实不存在继承关系。所以,我们要换个角度了,以关系型数据库来表达类的继承关系。我们先看类图:

    3种映照方式

  • 使用 subclass 进行映照:将每个实体对象映照到1个独立的表中,也就是说不用在关系数据模型中斟酌继承关系和多态。 
  • 使用 joined-subclass 进行映照: 对继承关系中的子类使用同1个表,这就需要在数据库表中增加额外的辨别子类类型的字段。 
  • 使用  union-subclass 进行映照:每一个类映照到1个表,通过关系数据模型中的外键来描写表之间的继承关系。这也就相当于依照类的结构来建立数据库中的表,并通过外键来建立表之间的继承关系。

    这里就不写如何配置了,太长了。
    总结:映照关系的学习到了这里就告1段落了,总结以下:
          第1,关系映照的动身点应当是:如何在关系型数据库中表达,类之间的关系。使关系型数据库对象化。
          第2,所有的映照关系的本质都是:在哪个对象里作为属性保存有另外一个的对象或对象集合
          第3,对数据的访问的方向是:谁持有谁就是访问入口
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生