码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate中的多对多映射

时间:2016-06-06 20:41:53      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

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 (?, ?)

 

Hibernate中的多对多映射

标签:

原文地址:http://www.cnblogs.com/juaner767/p/5564825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!