Hibernate框架-多对多映射

需求:

学生与课程

一个学生可以有多门课程

一个课程可以有多个学生


代码:

public class Developer {

    private int d_id;

    private Stringd_name;

    // 开发人员,参数的多个项目

    private Set<Project>projects = new HashSet<Project>();

}


public class Project {

    private int prj_id;

    private Stringprj_name;

    // 项目下的多个员工

    private Set<Developer>developers = new HashSet<Developer>();
}


project.hbm.xml

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mappingpackage="cn.itcast.c_many2many">

   

    <classname="Project"table="t_project">

        <idname="prj_id">

            <generatorclass="native"></generator>

        </id>  

        <propertyname="prj_name"length="20"></property>

        <!--

            多对多映射:

            1.  映射的集合属性: “developers”

            2.  集合属性,对应的中间表: “t_relation”

            3. 外键字段:  prjId

            4. 外键字段,对应的中间表字段:  did

            5.   集合属性元素的类型

         -->

         <setname="developers"table="t_relation"cascade="save-update">

            <keycolumn="prjId"></key>

            <many-to-manycolumn="did"class="Developer"></many-to-many>

         </set>

         

    </class>

   

 

</hibernate-mapping>



develop.hbm.xml

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mappingpackage="cn.itcast.c_many2many">

   

    <classname="Developer"table="t_developer">

        <idname="d_id">

            <generatorclass="native"></generator>

        </id>  

        <propertyname="d_name"length="20"></property>

       

        <!--

            多对多映射配置:员工方

                name  指定映射的集合属性

                table 集合属性对应的中间表

                key   指定中间表的外键字段(引用当前表t_developer主键的外键字段)

                many-to-many

                    column 指定外键字段对应的项目字段

                    class  集合元素的类型

         -->

        <setname="projects"table="t_relation">

            <keycolumn="did"></key>

            <many-to-manycolumn="prjId"class="Project"></many-to-many>

        </set>

       

         

    </class>

   

 

</hibernate-mapping>

维护关联关系

设置inverse属性,在多对多种维护关联关系的影响?

1) 保存数据

有影响。

          inverse=false ,有控制权,可以维护关联关系;保存数据的时候会把对象关系插入中间表;

         inverse=true,  没有控制权,不会往中间表插入数据。

2) 获取数据

         无。

 

3) 解除关系

         // 有影响。

         // inverse=false ,有控制权,解除关系就是删除中间表的数据。

         // inverse=true, 没有控制权,不能解除关系。

4) 删除数据

         有影响。

         // inverse=false, 有控制权。先删除中间表数据,再删除自身。

         // inverse=true, 没有控制权。如果删除的数据有被引用,会报错!否则,才可以删除




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值