zoukankan      html  css  js  c++  java
  • 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>
    复制代码
  • 相关阅读:
    dom4j 解析 xml文件1
    java 简单的动态代理例子
    标识接口的作用 (转)
    JAVA servlet输出IE6下乱码
    java时间操作函数汇总
    IE支持getElementsByClassName方法
    女朋友问我 LB 是谁?
    人类高质量 Java 学习路线【一条龙版】
    程序员作图工具和技巧,你 get 了么?
    3 分钟了解 JSON Schema
  • 原文地址:https://www.cnblogs.com/dnf1612/p/6541006.html
Copyright © 2011-2022 走看看