zoukankan      html  css  js  c++  java
  • Hibernate中的多对多映射

    1.需求

    项目与开发员工

    一个项目,有多个开发人员

    一个开发人员,参与多个项目 【多对多】

    2.实体bean设计

      Project:

    public class Project {
        private int prj_id;
        private String prj_name;
        private Set<Developer> devs = new HashSet<Developer>();
        set...
        get...
    }

      Developer:

    public class Developer {
        private int d_id;
        private String d_name;
        private Set<Project> projects = new HashSet<Project>();
        set...
        get...
    }

    3.配置映射文件

      Project.hbm.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.juaner.hibernate.project">
        <class name="Project" table="t_project">
            <!--主键-->
            <id name="prj_id" >
                <generator class="native"/>
            </id>
            <property name="prj_name"  type="string"/>
            <set cascade="save-update" inverse="true" name="devs" table="t_relation">
                <key column="prjid"></key>
                <many-to-many column="devid" class="Developer"/>
            </set>
        </class>
    
    </hibernate-mapping>

      Developer.hbm.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.juaner.hibernate.project">
        <class name="Developer" table="t_developer">
            <!--主键-->
            <id name="d_id">
                <generator class="native"/>
            </id>
            <property name="d_name" type="string"/>
            <set name="projects" table="t_relation" >
                <!--外键字段-->
                <key column="devid"></key>
                <many-to-many column="prjid" class="Project"/>
            </set>
        </class>
    
    </hibernate-mapping>

    4.保存数据

        @Test
        public void test1(){
            Session session = sf.openSession();
            session.beginTransaction();
    
            Project project_wuliu = new Project();
            project_wuliu.setPrj_name("物流系统");
            Project project_oa = new Project();
            project_oa.setPrj_name("OA系统");
    
            Developer developer_1 = new Developer();
            developer_1.setD_name("曹集");
            Developer developer_2 = new Developer();
            developer_2.setD_name("王睿");
            Developer developer_3 = new Developer();
            developer_3.setD_name("老张");
    
            project_wuliu.getDevs().add(developer_1);
            project_wuliu.getDevs().add(developer_2);
    
            project_oa.getDevs().add(developer_3);
            project_oa.getDevs().add(developer_2);
    
            session.save(project_wuliu);
            session.save(project_oa);
            session.save(developer_1);
            session.save(developer_2);
            session.save(developer_3);
    
    
            session.getTransaction().commit();
            session.clear();
    
        }

      此时,会生成9条sql语句:

            Hibernate: insert into t_project (prj_name) values (?)
            Hibernate: insert into t_project (prj_name) values (?)
            Hibernate: insert into t_developer (d_name) values (?)
            Hibernate: insert into t_developer (d_name) values (?)
            Hibernate: insert into t_developer (d_name) values (?)
            Hibernate: insert into t_relation (prjid, devid) values (?, ?)
            Hibernate: insert into t_relation (prjid, devid) values (?, ?)
            Hibernate: insert into t_relation (prjid, devid) values (?, ?)
            Hibernate: insert into t_relation (prjid, devid) values (?, ?)
  • 相关阅读:
    我第一次上传自己的Android作品——自己的名片夹
    我开发的宣传软件,劲撑广州恒大冲击亚冠,,无论你是安卓程序员还是广州恒大球迷,欢迎下载代码,或者留下邮箱,我会把Apk发过去
    写死我的QQ程序,不过玩的效果很爽^_^,、、不敢回头去看代码了,想吐、
    有些关于Google地图开发中密钥申请的不解,一直走不下去,求助
    一个有趣的Sql查询
    笑谈“委托”与“事件”
    《中国编程挑战赛--资格赛》赛题及解答
    [转载] 在.net安装程序部署SQL Server数据库
    VS.Net Add_In Example(C#源码)
    对中国编程资格赛一题的解答
  • 原文地址:https://www.cnblogs.com/juaner767/p/5564825.html
Copyright © 2011-2022 走看看