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中定 ...
随机推荐
- eclipse_中的注释_快捷键
eclipse 中的注释 快捷键 把要注释的代码选中,按Ctrl+Shift+/ /* */ 形式的 ctrl+/ //形式的 取消代码注释: 把要注释的代码选中,按Ctrl+Shift+\ /* ...
- for( unsigned int i=heapSize/2-1; i>=0; --i)
unsigned int的表示 今天在写堆排序的时候遇到一个BUG void builMaxHeap( int *arr,unsigned int heapSize){ unsigned int i; ...
- Unity5 新功能解析--GI(全局光)
http://blog.csdn.net/leonwei/article/details/48009059 Unity5带来的最大的改变就是全新的GI,在烘焙引擎上抛弃了4的beast,使用了虚幻采用 ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 排序、筛选、分页以及分组
Sorting, filtering, paging, and grouping 7 of 8 people found this helpful By Tom Dykstra The Contoso ...
- Eclipse远程调试出现“JDWP Transport dt_socket failed to initialize”的解决方案
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...
- 【bzoj1052】覆盖问题
[bzoj1052]覆盖问题 分析 考虑二分\(L\)的值,然后判断3个\(L*L\)能否覆盖所有的点. 这时候出现了两种可能的思路. 思路1 首先,3是一个很小的常数. 我们想:假如能探究出1和2的 ...
- WebViewJavascriptBridge-Obj-C和JavaScript互通消息的桥梁
转载至:http://www.cocoachina.com/ios/20150629/12248.html 译者:@coderyi9 本文翻译自Marcus Westin的开源框架WebViewJav ...
- Log 日志级别
一直对于程序中的日志级别有点模糊,今天专门百度学习下.遂成此文: 日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).: 1.static Le ...
- Sum Root to Leaf Numbers [LeetCode]
Problem description: http://oj.leetcode.com/problems/sum-root-to-leaf-numbers/ Basic idea: To store ...
- ScrollView嵌套StackView提示需要宽度和高度限制
场景: 在一个xib的view中,添加一个ScrollView,再在这个ScrollView中添加一个StackView,StackView中不加控件(用代码动态加). 问题: 提示ScrollVie ...