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的关联映射 (员工管理)相关推荐

  1. chapter6 Hibernate的关联映射

    回顾 ·          下面这个异常是怎么回事?该怎么解决? org.hibernate.MappingException: Unknownentity: com.aptech.jb.entity ...

  2. 初识Hibernate之关联映射(一)

    上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...

  3. Hibernate的关联映射--一对多、

    这是我 1 单向一对多: 实体类:(课程类)Grade与(学生类)Student的一对多关系 学生类: public class Student implements java.io.Serializ ...

  4. 8 Hibernate:关联映射(Associations)

    Hibernate 关联映射(Associations)分为: 8.1 Hibernate:一对一关联映射    8.1.1 Hibernate:一对一单向关联(unidirectional)     ...

  5. Hibernate一对一关联映射配置

    一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保 ...

  6. Hibernate之关联映射

    在现实生活中 ,很少有对象是孤立存在的,例如老师,往往和被授课的学生存在关联关系,如果得到了某个老师实例,那么我们就可以直接获取该老师 对应的全部学生.同样,我们得到了一个学生实例  ,我们也可以获取 ...

  7. 【Hibernate步步为营】--关联映射之多对一

    上篇文章讨论了Hibernate的基本映射,一个实体类对应着一张表,在相应的Hibernate Mapping文件中使用<class>标签映射.并且实体类中的普通属性对应着表字段,使用&l ...

  8. Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射

    在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...

  9. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

  10. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射--对象的三种关系 Hibernate框架基于ORM设 ...

最新文章

  1. java绘图之Graphics类
  2. 你以为border-radius只是圆角吗?【各种角度】
  3. Eclipse java项目转换为web项目
  4. 26. linix脚本启动java程序
  5. Facebook利用Home平台加速进军移动领域
  6. mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接
  7. 解决python中join路径分隔符跨平台移植性
  8. ps efgrep mysql 命令_mysql常用管理命令
  9. 服务器系统怎么找便签,Win10电脑怎么找回便签记录?如何恢复误删的内容?
  10. Atitit java读取堵塞cmd命令行返回结果 java read maven 主要原理是另外线程读取标准流,错误流。。 回显增加out头,这样发布区分errstream和stdstream的
  11. 知网一键下载PDF文献
  12. JVM学习-深入理解Java虚拟机代码实践问题
  13. 本地机房连接阿里云专有网络VPC构建混合云解决方案
  14. 隧道联系测量高程传递水准数据处理流程及说明
  15. Excise_day02
  16. 深度增强学习射击类游戏(vizdoom)
  17. 阿拉丁和神灯的故事(二)
  18. redis如何查看版本号?
  19. 用VMware搭建云桌面
  20. 牛客网-精华专题-前端校招面试题目合集

热门文章

  1. 安装postgres10 后,使用自带的pgAdmin 4 访问数据库,出现The pgAdmin 4 server could not be contacted错误的最完美解决方案,另附安装步骤。
  2. 【心情】2016ICPC青岛站打铁记
  3. 车载TBOX,4G北斗/GPS双模定位
  4. The Elder(hdu 5956 树上斜率dp + 队列还原)
  5. 经纬度转WGS84坐标
  6. win10 企业版2016长期服务激活教程
  7. TouchBar Dino for mac(TouchBar上的小恐龙跑酷游戏)
  8. 【为人处事】:如何识人
  9. html markdown写笔记,谈谈为知笔记的Markdown功能
  10. 5G时代的到来--5G技术介绍