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 (?, ?)
Hibernate中的多对多映射的更多相关文章
- Hibernate-ORM:12.Hibernate中的多对多关联关系
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵 一,讲述多对多 多对多的关联 ...
- 【Hibernate步步为营】--多对多映射具体解释
上篇文章具体讨论了一对多映射,在一对多映射中单向的关联映射会有非常多问题,所以不建议使用假设非要採用一对多的映射的话能够考虑使用双向关联来优化之间的关系,一对多的映射事实上质上是在一的一端使用< ...
- EF Core中的多对多映射如何实现?
EF 6.X中的多对多映射是直接使用HasMany-HasMany来做的.但是到了EF Core中,不再直接支持这种方式了,可以是可以使用,但是不推荐,具体使用可以参考<你必须掌握的Entity ...
- Hibernate中双向多对多的两种配置方式
Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- hibernate笔记--单向多对一映射方法
假设我们要建两张表,学生信息表(student)和年级信息表(grade),关系是这样的: 我们可以看出学生表和=年级表是多对一的关系,多个学生会隶属于一个班级,这种关系在hibernate中成为单边 ...
- hibernate(四) 双向多对多映射关系
序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
- hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同
基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...
- hibernate中HQL多对多的查询
现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...
随机推荐
- Android 代码混淆 防止反编译
为了防止代码被反编译,因此需要加入混淆.混淆也可以通过第三方进行apk混淆,也可以用android中的proguard进行混淆. 混淆步骤: 1.配置混淆文件,名字可以随意,在这里使用proguard ...
- 转:Effective c + + notes
补充自己的. 转自:http://blog.csdn.net/ysu108/article/details/9853963#t0 Effective C++ 笔记 目录(?)[-] 第一章 从C转向C ...
- 20160808_卸载OpenJDK
1.查看信息 [root@localhost ~]# rpm -qa | grep jdkjava-1.6.0-openjdk-devel-1.6.0.0-1.50.1.11.5.el6_3.x86_ ...
- jQuery内置函数 ready
jQuery给我们提供了一些非常实用的函数 ready:加载函数 传统事件只能绑定一个函数 后面的函数会把前面的函数覆盖 js中用的是 window.onload = function(){}; j ...
- sensitivity and specificity(敏感性和特异性)
医学.机器学习等等,在统计结果时时长会用到这两个指标来说明数据的特性.
- java 反射机制的实例
[案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /** * 通过一个对象获得完整的包名和类名 ...
- assert的用处
ASSERT函数是用于调试中,也就是说在你的代码中当是Debug的时候它完成对参数的判断,如果是TRUE则什么都不做,如果是FALSE则弹出一个程序中断对话框提示程序出现错误.在Release版本中它 ...
- mysql设置编码
1.修改数据库的编码 将数据库(test)的编码方式修改为utf8,如: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE ut ...
- C++语言中cin cin.getline cin.get getline gets getchar 的用法实例
#include <iostream> #include <string> using namespace std; //关于cin cin.getline cin.get g ...
- C#的对象内存模型
转载自:http://www.cnblogs.com/alana/archive/2012/07/05/2577893.html C#的对象内存模型: 一.栈内存和堆内存1.栈内存 由编译器自动分配和 ...