zoukankan      html  css  js  c++  java
  • 5.多对多关联映射

    1.实体多对多关联

    两个实体型之间的联系:

    多对多联系(m:n)
    定义:
    如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系,记为m:n。

    2.数据库多对多关联(两个表的关系是必须得拆成三个表的)

    Student.java
    
    public class Student {
        private int id;
        private String name;
        private String studentNo;
        private Set<Course> courseSet 
            = new HashSet<Course>();
        ......
    } 
    Course.java
    
    public class Course {
        private Integer id;
        private String name; // 课程名称
        private int credit;  // 学分
        private Set<Student> studentSet
            = new HashSet<Student>();
        ......
    }
    Student.hbm.xml
    
    <set name="courseSet" table="STUDENTCOURSE"   
            inverse="false">
        <key column="STUDENTID"/>
        <many-to-many class="Course" column="COURSEID"/>
    </set>
    Course.hbm.xml
    
    <set name="studentSet" table="STUDENTCOURSE" 
            inverse="true">
        <key column="COURSEID"/>
        <many-to-many class="Student" column="STUDENTID"/>
    </set>

    <set>元素属性。
    name属性:指定类的属性名;
    table属性:指定多对多关联关系中间表;
    cascade级联操作属性:save-update、delete、all、none。
    <set>子元素。
    <key>元素:设定实体类对应表的外键;
    <many-to-many>元素中class属性:设定关联类型。

    inverse 是 Hibernate 中双向关联关系中的基本概念,用来设置关系由哪一方来维护。
    inverse=true 表示被控方,=false 表示主控方;
    在多对多关系中需要设置哪一方为被控方,即设置inverse=true 。

    使用注解映射多对多关系:
    
    在Student类的 courseSet属性上配置,
    
    @ManyToMany
    @JoinTable(name="STUDENTCOURSE", 
        joinColumns=@JoinColumn(name="STUDENTID"),
        inverseJoinColumns=@JoinColumn(name="COURSEID"))
    在Course类的 studentSet 属性上配置:
    @ManyToMany(mappedBy="course")
    
    @ManyToMany:表明多对多关联关系。
    @JoinTable
    name:指定关联表。
    joinColumns:指向实体对应表的外键。
    inverseJoinColumns:指向所关联的实体对应表的外键。
    @ManyToMany
    mappedBy:表示关联关系由Student维护。
  • 相关阅读:
    如何批量查看容器内部的进程?
    如何一键将k8s中configmap以及secret的配置变成本地环境变量
    如何快速批量下载m3u8(ts)视频?
    如何快速搜索?
    【待学习】知识点/小类
    【待学习】科目/大类
    总览:SpringCloud基础结构
    AES 加密解密
    JVM学习:方法重载的优先级
    反射操作数组---反序列化小知识
  • 原文地址:https://www.cnblogs.com/Firesun/p/9844658.html
Copyright © 2011-2022 走看看