Hibernate 关系映射小结

         最近刚开始学习hibernate, 学到关联映射的时候有些疑惑,现在学完了 ,总结一下。

一、基本概念

    关联关系:为对象与对象之间的关系,并不是指数据库中表与表的关系

    单向:意思为可以通过A找到B,而不能通过B找到A。代码中体现为A中拥有B的一个引用,而B没有A的引用

    双向:既可以通过A找到B,也可以通过B找到A。代码中体现为AB中都拥有对方的引用。

二、关联关系分类及示例

   关系可以分为:单向、双向、一对一、一对多、多对一、多对多

   根据上边之间的组合,可以组合为以下七种:

  1. 单向一对一
  2. 双向一对一
  3. 单向一对多
  4. 单向多对一
  5. 双向一对多(双向一对多)
  6. 单向多对多
  7. 双向多对多

   单向和双向在上面已经解释过了,下面解释下一对一、一对多、多对一、多对多。(具体示例单击相关链接即可)

    1.  一对一

            一对一关系就像现实中的一夫一妻,一个丈夫(妻子)只能有一个妻子(丈夫)。

           
单向一对一
是指:可以通过丈夫找到妻子,而不能通过妻子找到丈夫。反之亦成立.

           

双向一对一
:即可以通过丈夫找到妻子,也可通过妻子找到丈夫。

           

组件映射
:一个对象是另一个对象的一部分,比如说汽车零件(CarItem)是汽车(Car)的一部分。

                                 代码中配置方法为:1.Annotation方式; 只需在Car中的getCarItem()方法上添加注解:@Embedded即可。

                                                                                  @Embedded 表明该对象是从别的位置嵌入过来的,是不需要单独映射的表.

                                                                      2.XML方式:只需要配置一个Car.hbm.xml文件即可,不需要CarItem.hbm.xml文件。

                                                                                在Car.hbm.xml中配置如下

<hibernate-mapping>
    <class name="Car" table="Car">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id> 

        <property name="name" column="name" />
        <component name="CarItem">
            <property name="CarItemId"></property>
        </component>
    </class>
</hibernate-mapping>


    2.一对多和多对一

            一对多和多对一都是指一个对象包含或拥有多个对象,只是在代码中的表示的侧重点不同(在数据库中生成的表的结构一样),就像一个group(组)包含多个user(用户)。

            

单向一对多
:group一对多user,此时代码中的侧重点在group,及对象有拥有user的集合。这时可以通过group找到该group下的所有user,而不能通过user找到该group。
            
单向多对一
:user多对一group,此时代码中的侧重点在user,及对象有拥有group的引用。这时可以通过user找到该user所在的group,而不能通过group找到该user。

            

双向一对多(双向多对一)
:一对多和多对一的双向关联为同一种情况。

    3.多对多

              一个老师可以教多个学生,而一个学生可以被很多老师教。此时老师和学生之间就是多对多的关系。(此时数据库中会产生中间表)

            

单向多对多
:单向多对多在代码中的写法和一对多或多对一类似,都是一个对象拥有另一个对象的引用,这个对象可以通过另一个对象的引用找到另一个对象。

            

双向多对多
:和单向不同的是,双向多对多中两个对象都拥有对方的引用,可以通过这个引用很容易的找到对方。

       规律:凡是双向关联,必设mappedBy。

       mappedBy的作用是告诉另一方,这一方被注解的属性已经在另一方注解了。例如在Wife类中的getHusband () 方法上注解@OneToOne(mappedBy="wife"),表示该类已经被     Husband类中的wife属性映射,不需要在此处重复映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值