• 【转】hibernate映射(单向双向的一对多、多对一以及一对一、多对一)


    多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一

    一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多

    也就是说一对多和多对一的映射策略是一样的,只是站的角度不同

    1.多对一(下面示例人员表(Info),民族表(Nation))  多个人员对应一个民族。要知道,人员表中的外键列nation是对应民族表的主键列code。所以要在Info.hbm.xml中配置nation外键指向民族表。(如下图所示)

    一般需要加上cascade="save-update",加这个配置业属性目的是,many表和one表一起更新

    2.一对多(下面以人员表(Info)和工作简历(Work)表为例)每个人员对应个工作简历。

    首先需要在Info的实体类中加入一个Set<Work> 类型的字段。

    然后再Info.hbm.xml中配置一对多。(如下图所示)

    <set name="实体类中集合成员的变量名(works)">
    <one-to-many class="Work表">
    <key>
    
        <column name="InfoCode" ></colum>
    
    </key>
    </set>

     3.一对一(人员表与密码表)每个人对应相应的用户密码:(因为外键值设置在login表上,所以在login.hbm.xml中配置信息)

    4.多对多

    数据库中没有多对多的关系。只有程序里面有。数据库中是使用两个一对多和多对一来实现多对多的。典型的是:中间表
    在程序中,如果中间表中没有其它信息,那就可以不用写中间表的实体类。
    多对多,还可以用在:用户和角色的关系上。
    1.给类加关联对象(集合对象)
    2.给hbm.xml配置

    <set name="当前类的集合属性" table="中间表">
    <key column="中间表中与此表对应的外键"></key>
    <many-to-many class="另外多方对象的类名" column="另外多方对象在中间表中的外键"></many-to-many>
    </set>
    
    <set name="courses" table="score">
    <key column="sno"></key>
    <many-to-many class="Course" column="cno"></many-to-many>
    </set>

     (双向)

    双向多对一关联 是最常见的关联关系。(这也是标准的父/子关联关系。)

    <class name="Person">
        <id name="id" column="personId">
            <generator class="native"/>
        </id>
        <many-to-one name="address" 
            column="addressId"
            not-null="true"/>
    </class>
    
    <class name="Address">
        <id name="id" column="addressId">
            <generator class="native"/>
        </id>
        <set name="people" inverse="true">
            <key column="addressId"/>
            <one-to-many class="Person"/>
        </set>
    </class>
    
    

    基于外键关联的双向一对一关联也很常见。

    <class name="Person">
        <id name="id" column="personId">
            <generator class="native"/>
        </id>
        <many-to-one name="address" 
            column="addressId" 
            unique="true"
            not-null="true"/>
    </class>
    
    <class name="Address">
        <id name="id" column="addressId">
            <generator class="native"/>
        </id>
       <one-to-one name="person" 
            property-ref="address"/>
    </class>
  • 相关阅读:
    不删除数据库,只删除GridView的某一行!
    纯CSS无图打造圆角Table 无图制作圆角
    2009年总结与2010总体计划
    工作中的碰到的问题,以及处理过程:
    SQL Server 2005 不允许远程连接解决方法
    Visual Studio 2008项目模板丢失的解决办法
    C#格式化数值结果表
    准备把csdn的博客搬到这里
    生产系统中 RAC 数据库服务器 不要批量 gzip压缩
    不再更新的业务统计表
  • 原文地址:https://www.cnblogs.com/claricre/p/6525817.html
Copyright © 2020-2023  润新知