【SSH】——Hibernate(4)关联映射之单向映射

      在上一篇SSH】——Hibernate3)实体映射中,已经提到了,ORM功能的实现,主要文件有映射类(*.java,映射文件(*.hbm.xml)和配置文件(*.property/.cfg.xml)。接下来通过三个文件,对映射类的实现进行分析。

 

      关联映射主要分为两大类:单向关联和双向关联。今天主要说一下单向关联

 

      一)一对一关联映射

      两个对象之间一对的关系,例如:Person(人)-IdCard(身份证)

      有两种策略可以实现一对一的关联映射:

 

      *主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联。如下图:

                   

                           

                              


      Hbm.xml配置文件:

 <hibernate-mapping>  
        <class name="com.example.hibernate.IdCard" table="t_idCard">  
            <id name="id">  
                <generator class="native"/>  
            </id>  
            <property name="cardNo"/>  
        </class>  
    </hibernate-mapping>  

 <hibernate-mapping>  
        <class name="com.example.hibernate.User" table="t_person">  
            <id name="id">  
                <!-- 采用foreign生成策略,它会取得关联对象的标识 -->  
                <generator class="foreign">  
                    <!-- property 指的是关联的对象 -->  
                    <param name="property">idCard</param>  
                </generator>  
            </id>  
            <property name="name"/>  
            <one-to-one name="idCard" constrained="true" />  
        </class>  
    </hibernate-mapping>  


      *唯一外键关联:外键关联,本来是用于多对一的配置,但是加上唯一的限制之后( 采用<many-to-one>标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性为一),也可以用来表示一对一关联关系,其实它就是多对一的特殊情况。如下图:


                              


      Hbm.xml文件配置:

<hibernate-mapping>  
        <class name="com.example.hibernate.Person" table="t_person">  
            <id name="id">  
                <generator class="native"/>  
            </id>  
            <!-- property指关联对象 --> 
            <property name="name"/>  
            <!-- 默认参考idCard的主键-->  
            <many-to-one name="idCard" unique="true"/>  
        </class>  
    </hibernate-mapping>  

<hibernate-mapping>  
    <class name="com.example.hibernate.IdCard" table="t_idCard">  
        <id name="id">  
            <generator class="native"/>  
        </id>  
        <property name="cardNo"/>  
    </class>  

</hibernate-mapping>


      二)多对一关联映射

      用户和组是多对一的关系。一个组有多个用户,一个用户只属于一个组。 
      有了ER图知识的积累,我们知道多对一的关联映射策略一定是在多的一端加入一个外键,指向一的一端。


                              

      Hbm.xml文件配置:

<hibernate-mapping>

    <classname="com.bjpowernode.hibernate.User"table="t_user">
        <idname="id">
            <generatorclass="native"/>
        </id>

        <propertyname="name"/>
        <many-to-one name="group"column="groupid"cascade="save-update"/>
    </class>

</hibernate-mapping>

      三)一对多关联映射(***)

      班级和学生是一对多的关系。一个班级有多个学生,一个学生只能属于一个班。 
      在多的一端加入一一端的主键当做外键。这样的冗余是最少的。


                           



      hbm.xml文件配置:
      在一的一端加入标签映射

<hibernate-mapping>

    <classname="com.bjpowernode.hibernate.Group"table="t_group">

        <idname="id">

            <generatorclass="native"/>

        </id>

        <propertyname="name"/>

        <set name=”users”>

            <key column=”groupId”/>

            <one-to-many class="com.bjpowernode.hibernate.User">

        </set>

    </class>

</hibernate-mapping>

      我们采用的是在一的一端维护关系。这样的话,多的一端并不知道一的一端的存在。也就是说学生并不知道班级的存在。


      四)多对多关联映射

      用户和角色的关系。一个用户可以有多个角色,一个角色可以有多个用户。 

      n:n的关系,一定会有一张第三张表来维护他们的关系。


                                   

      

      如果是user单向对role 那么则在user的一端加入标签映射。

      hbm.xml文件配置:

<set name="roles" table="t_user_role">  
     <key column="user_id"/>  
     <many-to-many class="com.hibernate.Role" column="role_id"/>  

</set>  




  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值