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 (?, ?)
  • 相关阅读:
    2019-08-10T12:18:27.745963Z 7 [Note] Slave I/O thread for channel '': connected to master 'repl_user@192.168.43.81:3306',replication started in log 'mysql-bin.000001' at position 154 2019-08-10T12:18:
    yum安装的mysql 目录结构
    Starting MySQL.. ERROR! The server quit without updating PID file (/db/data/110.pid).
    CentOS7修改主机名
    使用ssh登陆远程主机
    traceroute命令
    Linux设置开机启动
    检查是否安装服务包
    CSS之盒子模型
    BFC块级格式化上下文
  • 原文地址:https://www.cnblogs.com/juaner767/p/5564825.html
Copyright © 2011-2022 走看看