Hibernate(8) 多对多映射关系的建立

欢迎访问:我的个人网站

#建立多对多映射关系
之前已经了解了一对多的关系建立以及其操作,接下来接着总结多对多映射关系的建立,多对多映射关系的建立与一对多映射关系的建立类似,不同的是二者的实体都需要Set集合形式,并且映射文件也都需要使用many-to-many标签建立映射,除此之外,还需要建立第三张表并设置两个外键。下面按照步骤说明建立的过程

举例:一个学生可以分别有不同的老师授课,一名老师也可以给不同的学生授课。是一个多对多关系,下面的代码将依据该例展开。实体Teacher以及实体Student
####1.建立实体类
实体类的建立不再赘述,仅说明多对多关系建立时所需要注意的地方,在建立多对多映射关系的时候,实体Teacher与Student实体彼此之间需要建立映射,所以**在Teacher实体里面需指定一个存储Student对象的Set集合表示一个老师会教授多名学生。同样的,在Student实体里面也需要建立一个存储Teacher类型的Set集合来表示一个学生会有多名老师。如下:
对于实体的Set集合要记得new出来

	学生实体:
	private int id;
    private String name;
    private Set<Teacher> teacherSet = new HashSet<Teacher>();
	老师实体:
	private int id;
    private String name;
    Set<Student> studentSet = new HashSet<Student>();

####2.建立映射文件,
与一对一映射关系建立过程一致:设置“特殊”属性与表的主键对象,并对应普通属性。不同的地方在于需要设置set标签以及一些属性以建立映射关系,具体设置如下:

学生实体:
<hibernate-mapping>
    <class name="com.bestbigkk.domain.Student" table="tb_student">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>

        <property name="name" column="name"></property>

        <!--
            name表示的是Student实体的哪个属性对应Teacher
            table表示二者建立多对多关系所用的第三张表的名称
        -->
        <set name="teacherSet" table="tb_teacher_student" cascade="save-update">
            <!--
                key里面的column指的是当前实体在第三张表里面的外键
            -->
            <key column="_student"></key>
            <!--
                class指的是当前实体所对应的实体的全路径,
                column指的是当前当前实体(Student)所对应实体(Teacher)的外键名称
            -->
            <many-to-many class="com.bestbigkk.domain.Teacher" column="_teacher"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
老师实体:
<hibernate-mapping>
    <class name="com.bestbigkk.domain.Teacher" table="tb_teacher">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>

        <property name="name" column="name"></property>

        <set name="studentSet" table="tb_teacher_student" cascade="save-update">
            <!--当前实体在第三张表里面所对应的外键名称-->
            <key column="_teacher"></key>
            <many-to-many class="com.bestbigkk.domain.Student" column="_student"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

至此。多对多的映射关系也就建立完成,可以通过数据库查看映射的关系:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值