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中的多对多映射的更多相关文章

  1. Hibernate-ORM:12.Hibernate中的多对多关联关系

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵 一,讲述多对多 多对多的关联 ...

  2. 【Hibernate步步为营】--多对多映射具体解释

    上篇文章具体讨论了一对多映射,在一对多映射中单向的关联映射会有非常多问题,所以不建议使用假设非要採用一对多的映射的话能够考虑使用双向关联来优化之间的关系,一对多的映射事实上质上是在一的一端使用< ...

  3. EF Core中的多对多映射如何实现?

    EF 6.X中的多对多映射是直接使用HasMany-HasMany来做的.但是到了EF Core中,不再直接支持这种方式了,可以是可以使用,但是不推荐,具体使用可以参考<你必须掌握的Entity ...

  4. Hibernate中双向多对多的两种配置方式

    Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...

  5. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  6. hibernate笔记--单向多对一映射方法

    假设我们要建两张表,学生信息表(student)和年级信息表(grade),关系是这样的: 我们可以看出学生表和=年级表是多对一的关系,多个学生会隶属于一个班级,这种关系在hibernate中成为单边 ...

  7. hibernate(四) 双向多对多映射关系

    序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...

  8. hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

    基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...

  9. hibernate中HQL多对多的查询

    现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...

随机推荐

  1. python操作mongodb之五大量写操作

    import pymongo #库名 db = pymongo.MongoClient('192.168.30.252',27017).bulk_example #test集合插入 db.test.i ...

  2. [借鉴] Android简便通用的SimpleBaseAdapter

    public abstract class SimpleBaseAdapter<T> extends BaseAdapter { protected Context context; pr ...

  3. 【转】 Android自定义捕获Application全局异常

    大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...

  4. 编程获得CPU的主频

    CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed).CPU的主频表示在CPU内数字脉冲信号震荡的速度.主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者 ...

  5. Git 分支管理是一门艺术

    转载: Git 分支管理是一门艺术 1 要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码. 2 "辅助分 ...

  6. 20145218 《Java程序设计》第01次实验报告

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...

  7. Growing转化的每一步(笔记整理)

    渠道流量监控中,如何将劣质流量和优质流量区分开来? 劣质流量总会有有一些不同于其他正常渠道的特征,比如在同一个时间中大量集中访问.使用的硬件设备比较固定.使用特定的浏览器等. 实际案例:去年有一些 A ...

  8. JavaScript实现数组转置

    //数组转置  var  arr=[[2,5,6,8],[8,5,6,9],[9,6,2,1]] ;   var arrNew=[];//定义一个新数组   for(var i=0;i<arr[ ...

  9. boxplot

    x1 = rand(20,6); x2 = .5+rand(20,6); x3 = randn(20,6); x = [x1;x2;x3]; x = x(:); g1 = [ones(size(x1) ...

  10. JButton按钮

    1.方法 void  setSize(width,height):设置按钮大小 void  setBounds(x,y,width,heigth):设置按钮的左上角顶点位置和大小 void  setC ...