zoukankan      html  css  js  c++  java
  • Hibernate学习笔记二:常用映射配置

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6760895.html

    一:单向一对一

        常用唯一外键的方法来配置单向一对一关系。

        1:实体关系

        类A中有类B对象作为属性,一个A对象对应唯一一个B对象

        2:表关系

        表A中有外键x,其值是表B的主键,并且外键值不能重复

        3:配置文件

        在类A的配置文件中:

    <many-to-one name="类A中作为属性的类B对象名" class="类B路径"  column="表A中的外键名" unique="true"/>

         4:表操作

         在操作类A对象时,先操作B表中一条记录b,再操作A表中的外键值与B表记录b主键值相同的一条记录。

    二:单向多对一

        1:实体关系

        类A中有类B对象作为属性,可以有多个类A对象对应同一个类B对象作为属性值。

        2:表关系

        A表中有外键x,其值是B表的主键,并且外键值可以重复

        3:配置文件

        在类A的配置文件中:

    <many-to-one name="类A中作为属性的类B对象名" class="类B路径"  column="表A中的外键名"/> 

         4:表操作

         在操作A对象时,先操作B表中的一条记录b,再操作A表中外键值与B表记录b主键值相同的记录。

    三:单向一对多

        1:实体关系

        类A中有类B对象的集合,所以一个类A对象可以对应多个B对象。

        2:表关系

        表A的主键,作为表B的一个外键,并且可以在表B中出现多次

        3:配置文件

        在类A的配置文件中:

    <set name="B对象集合名">  
          <key column="A对象要映射成为的,B表中的外键名"/>  
          <one-to-many class="B类路径"/>  
    </set>  

         4:表操作

        在操作A对象时,先操作A表中一条记录a,再操作B表中外键值与A表记录a相同的记录。

    四:单向多对多

        1:实体关系

        类A中有类B对象的集合,所以一个A对象对应多个B对象。而多个A对象也可对应同一个B对象集合。

        2:表关系

        多对多关系需要借助中间表来建立关联关系。

        表A、表B分别保存类A、类B的成员属性。

        中间表保存两个属性:A的主键、B的主键。

        中间表的记录通过A、B的主键建立关联。

        3:配置文件

        在类A配置文件中:

    <set name="集合对象名" table="中间表名">  
         <key column="类A映射为中间表的a_id属性列"/>  
         <many-to-many class="类B路径" column="类B映射为中间表的b_id属性"/>  
    </set>  

         4:表操作

        操作A对象时,先操作A表,然后根据中间表,操作B表中相关记录。

    五:双向一对多(常用)

        1:实体关系

        类A有类B对象集合,一个对象A对应多个对象B;

        类B有类A的属性对象,一个B对象可以对应一个A对象,多个B对象可以对应同一个A对象。

        2:表关系

        表A中的主键,作为表B中的一个外键,并且该外键值可以重复。

        3:配置文件

        一的一端:类A配置文件中    

    <set name="B对象集合名" inverse="true"> //控制反转,让表B维护关联关系:即在操作表B时维护关联关系,无需再回头update表A来维护关系
           <key column="当前类A映射为B表中的外键名"/>  
          <one-to-many class="类B路径"/>  
    </set>  

        多的一端:类B配置文件中

    <many-to-one name="类B中的A对象成员名" column="由A主键映射过来的外键名"/> 

        4:表操作

        依次操作表A,表B。

    六:双向多对多

        1:实体关系

        类A中有类B对象集合;

        类B中也有类A对象集合。

        2:表关系

        借助中间表类维护多对多关系。

        表A保存类A的普通成员属性数据(不包括集合属性);

        表B保存类B的普通成员属性数据(不包含集合属性);

        中间表自动生成,保存类A、类B的主键,其记录通过A、B的主键值维护关联关系。

        3:配置文件

        A端:

    <set name="B对象集合名" table="中间表名" cascade="级联操作的类型">  //cascade属性:指明session对A对象的操作时,会同时把关联的B对象进行同样操作,而不需手动再操作一次
           <key column="A映射为中间表的a_id属性列"/>  
           <many-to-many class="类B路径" column="B映射为中间表的b_id属性列"/>  
    /set> 

        B端:

    <set name="A对象集合名" table="中间表名">  
          <key column="B映射为中间表属性列名"/>  
          <many-to-many class="类A路径" column="类A映射为中间表属性列名" inverse="true"/>  //控制反转:由A端维护关联关系
    /set>  

        4:表操作

        依次操作表A、表B。

        

  • 相关阅读:
    spring boot单元测试之七:用mockmvc模拟session(spring boot 2.4.3)
    spring boot单元测试之六:用mockmvc模拟cookie(spring boot 2.4.3)
    sql join 注意事项
    见路不走,即见因果
    presto sql 经典sql 应用
    别拿你的职业去拔高你个人的规格, 让人轻看
    《遥远的救世主》经典台词
    《卜算子·自嘲》
    天道连续剧 丁元英语录
    shell diff + kettle = mail 预警
  • 原文地址:https://www.cnblogs.com/ygj0930/p/6760895.html
Copyright © 2011-2022 走看看