Hibernate框架-多对多映射

来源:互联网 发布:手机淘宝消息发不出去 编辑:程序博客网 时间:2024/05/23 17:07

需求:

学生与课程

一个学生可以有多门课程

一个课程可以有多个学生


代码:

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