hibernate的关联映射 (员工管理)
1、一对多关联映射 (one–to --many)
(1)主表关联映射的实体类将字表实体类对象作为集合属性进行关联
private Set<字表实体类> 集合属性名称 (主表实体类映射的字表的实体对象集合属性)
映射文件中一对多关联映射
<set name ="集合属性名称" inverse=“true” cascad = "all |save|delete" lazy="true/false">....<one-to-many class="包名.字表实体类"/>
</set>
注意
set元素只能在主表中设置!
cascad属性只能在set元素中设置!
指定集合元素的类型
lazy="true"只能设置在set元素节点
2、多对一的关联映射(many–to–one)
(1)子表实体类将主表实体类对象作为关联属性进行映射
private 主表实体类名 主表关联属性对象;
(2)子表实体类的映射文件
<many-to-one name="主表关联属性对象" class="包名.主表实体类名" fetch="select" lazy="false"/>
下面的代码是对员工的基本操作 ,表的设计如下
##创建部门表
CREATE TABLE dep(depid INT PRIMARY KEY AUTO_INCREMENT,##主键自增depname VARCHAR(50) NOT NULL
);##创建福利表
CREATE TABLE welfare(wid INT PRIMARY KEY AUTO_INCREMENT,wname VARCHAR(50) NOT NULL
);##创建员工表,和部门之间是多对一关系,部门的子表
CREATE TABLE emp(eid INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50) NOT NULL,sex VARCHAR(4) DEFAULT '男',address VARCHAR(100),birthday DATE,photo VARCHAR(50),depid INT NOT NULL,CONSTRAINT fk_depid FOREIGN KEY (depid) REFERENCES dep(depid)
);##员工薪资表(与员工一对一关系)
CREATE TABLE salary(sid INT PRIMARY KEY AUTO_INCREMENT,eid INT NOT NULL UNIQUE,emoney FLOAT CHECK (emoney>=2000),CONSTRAINT fk_saleid FOREIGN KEY (eid) REFERENCES emp(eid)
);##员工福利关系表(员工与福利表的关系表(多对多关系))
CREATE TABLE empwelfare(ewid INT PRIMARY KEY AUTO_INCREMENT,eid INT NOT NULL,wid INT NOT NULL,CONSTRAINT fk_eweid FOREIGN KEY (eid) REFERENCES emp(eid),CONSTRAINT fk_ewwid FOREIGN KEY (wid) REFERENCES welfare(wid)
);
增加一个员工
Session session = HibernateSessionFactory.getSession();Transaction tx = session.beginTransaction();try {Emp emp = new Emp(new Dep(1), "花如意", "女", "西安", new SimpleDateFormat("yyyy-MM-dd").parse("1998-06-22"), null, null, null);/******设置薪资*****************/Set<Salary> salaries = new HashSet<Salary>();Salary salary = new Salary(emp,5600f);salaries.add(salary); //设置薪资到集合emp.setSalaries(salaries); //设置薪资集合到员对象/******************************//**************设置员工福利*****************/Set<Empwelfare> welfares = new HashSet<Empwelfare>();//获取员工要选择的福利Welfare welfare1 = (Welfare) session.load(Welfare.class, 1);Welfare welfare2 = (Welfare) session.load(Welfare.class, 2);Welfare welfare3 = (Welfare) session.load(Welfare.class, 3);Welfare welfare4 = (Welfare) session.load(Welfare.class, 4);//创建员工福利对象 设置员工对象到关系对象表中Empwelfare empwelfare1 = new Empwelfare(emp, welfare1);Empwelfare empwelfare2 = new Empwelfare(emp, welfare2);Empwelfare empwelfare3 = new Empwelfare(emp, welfare3);Empwelfare empwelfare4 = new Empwelfare(emp, welfare4);//将员工福利对象设置到集合中welfares.add(empwelfare1);welfares.add(empwelfare2);welfares.add(empwelfare3);welfares.add(empwelfare4);//将集合设置到员工对象中emp.setEmpwelfares(welfares);/**************************************/session.save(emp);tx.commit();System.out.println("保存成功");} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{HibernateSessionFactory.closeSession();}
修改员工信息
Session session = HibernateSessionFactory.getSession();Transaction tx = session.beginTransaction();try {Emp emp = (Emp)session.load(Emp.class, 12);emp.setEname("陆小果");emp.setSex("男");/******修改薪资*****************///获取原来的员工薪资集合Set<Salary> oldss = emp.getSalaries();if(oldss!=null &&oldss.size() >0 ){ //判断原来是否存在薪资for (Salary oldsa : oldss) {oldsa.setEmoney(9000f);}emp.setSalaries(oldss);}else{ //否则新增薪资Set<Salary> salaries = new HashSet<Salary>();Salary salary = new Salary(emp,5600f);salaries.add(salary); //设置薪资到集合emp.setSalaries(salaries); //设置薪资集合到员对象}/******************************//**************修改员工福利*****************///获取原来得员工福利集合Set<Empwelfare> oldws = emp.getEmpwelfares();if(oldws != null && oldws.size() >0){ //原来的福利是否存在//删除原来的福利(删除关系表的数据)for (Empwelfare oldwf : oldws) {session.delete(oldwf);}}Set<Empwelfare> welfares = new HashSet<Empwelfare>();//获取员工要选择的福利Welfare welfare1 = (Welfare) session.load(Welfare.class, 1);Welfare welfare2 = (Welfare) session.load(Welfare.class, 4);Welfare welfare3 = (Welfare) session.load(Welfare.class, 5);Welfare welfare4 = (Welfare) session.load(Welfare.class, 6);//创建员工福利对象 设置员工对象到关系对象表中Empwelfare empwelfare1 = new Empwelfare(emp, welfare1);Empwelfare empwelfare2 = new Empwelfare(emp, welfare2);Empwelfare empwelfare3 = new Empwelfare(emp, welfare3);Empwelfare empwelfare4 = new Empwelfare(emp, welfare4);//将员工福利对象设置到集合中welfares.add(empwelfare1);welfares.add(empwelfare2);welfares.add(empwelfare3);welfares.add(empwelfare4);//将集合设置到员工对象中emp.setEmpwelfares(welfares);/**************************************/session.merge(emp);tx.commit();System.out.println("更新成功");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{HibernateSessionFactory.closeSession();}
删除员工
Session session = HibernateSessionFactory.getSession();Transaction tx = session.beginTransaction();try {Emp emp = (Emp)session.load(Emp.class, 13);session.delete(emp);tx.commit();System.out.println("删除成功");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{HibernateSessionFactory.closeSession();}
查询所有员工信息
Session session = HibernateSessionFactory.getSession();Query query = session.createQuery("from com.po.Emp");List<Emp> emps = query.list();for (Emp emp : emps) {System.out.println("编号:" + emp.getEid());System.out.println("姓名:" + emp.getEname());System.out.println("性别:" + emp.getSex());System.out.println("地址:" + emp.getAddress());System.out.println("生日:" + emp.getBirthday());System.out.println("部门:" + emp.getDep().getDepname());System.out.println("薪资:" + ((Salary)emp.getSalaries().toArray()[0]).getEmoney());System.out.println("福利:");Set<Empwelfare> empwelfares = emp.getEmpwelfares();for (Empwelfare empwelfare : empwelfares) {System.out.println(empwelfare.getWelfare().getWname());}System.out.println("===================================");}
hibernate的关联映射 (员工管理)相关推荐
- chapter6 Hibernate的关联映射
回顾 · 下面这个异常是怎么回事?该怎么解决? org.hibernate.MappingException: Unknownentity: com.aptech.jb.entity ...
- 初识Hibernate之关联映射(一)
上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...
- Hibernate的关联映射--一对多、
这是我 1 单向一对多: 实体类:(课程类)Grade与(学生类)Student的一对多关系 学生类: public class Student implements java.io.Serializ ...
- 8 Hibernate:关联映射(Associations)
Hibernate 关联映射(Associations)分为: 8.1 Hibernate:一对一关联映射 8.1.1 Hibernate:一对一单向关联(unidirectional) ...
- Hibernate一对一关联映射配置
一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保 ...
- Hibernate之关联映射
在现实生活中 ,很少有对象是孤立存在的,例如老师,往往和被授课的学生存在关联关系,如果得到了某个老师实例,那么我们就可以直接获取该老师 对应的全部学生.同样,我们得到了一个学生实例 ,我们也可以获取 ...
- 【Hibernate步步为营】--关联映射之多对一
上篇文章讨论了Hibernate的基本映射,一个实体类对应着一张表,在相应的Hibernate Mapping文件中使用<class>标签映射.并且实体类中的普通属性对应着表字段,使用&l ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- (转)Hibernate关联映射——对象的三种关系
http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射--对象的三种关系 Hibernate框架基于ORM设 ...
最新文章
- java绘图之Graphics类
- 你以为border-radius只是圆角吗?【各种角度】
- Eclipse java项目转换为web项目
- 26.	linix脚本启动java程序
- Facebook利用Home平台加速进军移动领域
- mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接
- 解决python中join路径分隔符跨平台移植性
- ps efgrep mysql 命令_mysql常用管理命令
- 服务器系统怎么找便签,Win10电脑怎么找回便签记录?如何恢复误删的内容?
- Atitit java读取堵塞cmd命令行返回结果 java read maven 主要原理是另外线程读取标准流,错误流。。 回显增加out头,这样发布区分errstream和stdstream的
- 知网一键下载PDF文献
- JVM学习-深入理解Java虚拟机代码实践问题
- 本地机房连接阿里云专有网络VPC构建混合云解决方案
- 隧道联系测量高程传递水准数据处理流程及说明
- Excise_day02
- 深度增强学习射击类游戏(vizdoom)
- 阿拉丁和神灯的故事(二)
- redis如何查看版本号?
- 用VMware搭建云桌面
- 牛客网-精华专题-前端校招面试题目合集
热门文章
- 安装postgres10 后,使用自带的pgAdmin 4 访问数据库,出现The pgAdmin 4 server could not be contacted错误的最完美解决方案,另附安装步骤。
- 【心情】2016ICPC青岛站打铁记
- 车载TBOX,4G北斗/GPS双模定位
- The Elder(hdu 5956 树上斜率dp + 队列还原)
- 经纬度转WGS84坐标
- win10 企业版2016长期服务激活教程
- TouchBar Dino for mac(TouchBar上的小恐龙跑酷游戏)
- 【为人处事】:如何识人
- html markdown写笔记,谈谈为知笔记的Markdown功能
- 5G时代的到来--5G技术介绍