文章目录

  • 1 一对多(部门对员工)
    • 1.0 确定一对多中的关系
    • 1.1 编写实体类
    • 1.2 编写映射配置文件与核心配置文件
  • 2 多对多(学生对教师)
    • 2.0 确定多对多中的关系
    • 2.1 编写实体类
    • 2.2 编写映射配置文件与核心配置文件

更多Hibernate在框架开发


1 一对多(部门对员工)

1.0 确定一对多中的关系

部门:一,主表,

员工:多,从表,添加部门外键

注意: 部门需要知道有多少员工,员工需要知道自己属于哪个部门,这是一个双向关联的关系,在实体类和映射配置中,都是双向的关联。而在其他项目中,或许只存在单向关联的一对多关系。

1.1 编写实体类

部门实体类包含员工实体类的集合引用 ; 员工实体类包含部门实体类的对象引用。

Class Staff

public class Staff {private String StaId;private String StaName ;private Depart depart ;.........
}

Class Depart

public class Depart {private Integer depId ;private String depName ;private Set<Staff> staffs = new HashSet<Staff>();............
}

1.2 编写映射配置文件与核心配置文件

Staff.hbm.xml

<hibernate-mapping package="cn.kmust.entity">    <class name="Staff" table="tb_staff">.......................<!-- many-to-one: 建立多对一的映射配置name: 员工实体类中的部门对象属性class: 指定部门对象属性对应的实体类colum: 员工表中外键字段名称cascade:级联样式表save-update: 级联保存和更新delete:级联删除--><many-to-one name="depart" cascade="save-update" class="Depart" column="depId"></many-to-one> </class>
</hibernate-mapping>

Depart.hbm.xml

<hibernate-mapping package="cn.kmust.entity"><class name="Depart" table="tb_depart">.....................<!-- set:name: 部门实体类中的员工对象属性table: 员工表,可以省略inverse:true表示让部门在执行操作时,放弃维护关联关系的权利。 一般都是让多的那一方放弃。key: 映射外键字段column: 一对多中的外键字段名one-to-mang: 建立一对多映射配置class: 指定员工对象属性所对应的实体类  cascade:级联样式表save-update: 级联保存和更新delete:级联删除       --><set name="staffs" table="tb_staff" cascade="save-update,delete" inverse="true"><key column="depId"></key><one-to-many class="Staff"/></set></class>
</hibernate-mapping>

hibernate.cfg.xml

<mapping resource="cn/kmust/entity/Staff.hbm.xml"/>
<mapping resource="cn/kmust/entity/Depart.hbm.xml"/

##1.3 测试:级联添加 +级联删除

/*** 添加部门的同时,级联添加员工*    在Depart映射配置文件中配置级联属性cascade="save-update"*/
//创建: 一个部门,两个员工
Depart dep_lab110 = new Depart();
dep_lab110.setDepName("110实验室");
Staff staWXT = new Staff() ;
staWXT.setStaName("王晓婷");
Staff staZDK = new Staff();
staZDK.setStaName("张大科");
//建立双向关联
dep_lab110.getStaffs().add(staWXT) ;
dep_lab110.getStaffs().add(staZDK) ;
staWXT.setDepart(dep_lab110);
staZDK.setDepart(dep_lab110);
//添加部门
session.save(dep_lab110);
/*** 添加员工的同时,级联添加部门*    在Staff映射配置文件中配置级联属性cascade="save-update"*/
//创建:一个员工,一个部门
Depart dep_lab220 = new Depart() ;
dep_lab220.setDepName("220实验室");
Staff staFCY = new Staff() ;
staFCY.setStaName("王五");
//建立双向关联
dep_lab220.getStaffs().add(staFCY) ;
staFCY.setDepart(dep_lab220);
//添加员工
session.save(staFCY);
/*** 添加员工的同时,把员工加入已存在的部门*/
Depart dep_lab = session.get(Depart.class,1);
Staff staZYQ = new Staff();
staZYQ.setStaName("赵玉强");
//员工关联已有的部门
staZYQ.setDepart(dep_lab);
session.save(staZYQ);
/*** 把赵玉强从110实验室部门转移到220实验室部门*    在Staff映射配置文件中添加cascade="save-update"  */
Depart dep_lab220 = session.get(Depart.class,4);
Staff sta = session.get(Staff.class,"ff808181634d8db301634d8db5f50000") ;
//建立双向关联
dep_lab220.getStaffs().add(sta);
sta.setDepart(dep_lab220);
/*** 删除部门的同时,级联删除部门下的所有员工*     在Depart映射配置文件中添加cascade="delete"* 提示:如果不是级联删除,则先把部门下的所有员工的部门外键置为null,然后再删除该部门*/
Depart dep_lab =  session.get(Depart.class,1) ;
session.delete(dep_lab);

2 多对多(学生对教师)

2.0 确定多对多中的关系

学生:多,添加教师外键

教师:多,添加学生外键

数据库中需要第三张表维护两个外键关系

提醒: 虽然数据库中需要第三张表,但实体类并不需要第三个。不过需要注意的是,如果第三张表除了两个外键字段之外还有其他字段,则需要第三个实体类,其余两个实体类需与第三个实体类建立一对多的关系,构成这两个实体类的多对多关系,如果商品、订单和订单项。

2.1 编写实体类

教师实体类包含学生实体类的集合引用 ; 学生实体类包含教师实体类的集合引用 ;

Class Teacher

public class Teacher {private String teaId ;private String teaName ;private Set<Student> students = new HashSet<Student>() ;.................
}

Class Student

public class Student {private String stuId ;private String stuName ;private Set<Teacher> teachers = new HashSet<Teacher>() ;.................
}

2.2 编写映射配置文件与核心配置文件

Student.hbm.xml

<hibernate-mapping package="cn.kmust.entity"><class name="Student" table="tb_student">...........................<!-- set: name : 学生实体类中的教师对象集合属性table: 中间表的表名key:column: 学生在中间表中的外键字段名many-to-many:class: 教师对象集合属性所在的实体类colum: 教师在中间表中的外键字段名   inverse:放弃对外键的维护cascade: 级联--><set name="teachers" table="tb_student_teacher" inverse="true" cascade="save-update"><key column="stuId"></key><many-to-many class="Teacher" column="teaId" /></set></class>
</hibernate-mapping>

Teacher.hbm.xml

<hibernate-mapping package="cn.kmust.entity">.................................<!-- set: name : 教师实体类中的学生对象集合属性table: 中间表的表名key:column: 教师在中间表中的外键字段名many-to-many:class: 学生对象集合属性所在的实体类colum: 学生在中间表中的外键字段名 cascade: 级联--><set name="students" table="tb_student_teacher" cascade="save-update"><key column="teaId"></key><many-to-many class="Student" column="stuId"/></set></class>
</hibernate-mapping>

hibernate.cfg.xml

<mapping resource="cn/kmust/entity/Student.hbm.xml"/>
<mapping resource="cn/kmust/entity/Teacher.hbm.xml"/>

##2.3 测试: 级联保存+级联删除

/*** 添加学生的同时,级联添加该学生的所有老师*/
//创建: 一个学生,两个老师
Student stu_ZYQ = new Student() ;
stu_ZYQ.setStuName("赵玉强");
Teacher tea_QQ = new Teacher();
tea_QQ.setTeaName("钱谦");
Teacher tea_CLL = new Teacher();
tea_CLL.setTeaName("常璐璐");
//建立双向关系
stu_ZYQ.getTeachers().add(tea_CLL);
stu_ZYQ.getTeachers().add(tea_QQ);
tea_CLL.getStudents().add(stu_ZYQ);
tea_QQ.getStudents().add(stu_ZYQ);
session.save(stu_ZYQ);

提示: 实际项目中,禁用多对多的级联删除

Hibernate②一(多)对多的映射配置与级联操作相关推荐

  1. Hibernate一对多关联映射及cascade级联操作

    我们以客户(Customer)与订单(Order)为例 实体类创建 Order订单实体类 //订单-----多的一方 public class Order {private Integer id;pr ...

  2. Hibernate学习-14:实体之间的关系及其配置,级联操作

    1.实体之间有三种关系: * 一对多: * 一个用户,生成多个订单,每一个订单只能属于一个用户. * 建表原则: * 在多的一方创建一个字段,作为外键,指向一的一方的主键. * 多对多: * 一个学生 ...

  3. Hibernate学习总结(5)——一对多的级联操作

    首先介绍一下一对多是什么,一对多关系是关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关. 例如:我有一 ...

  4. java hibernate 多对多_hibernate 多对多映射配置详解

    表关系 如图: Teacher.java文件: privateint id; private String name; private Set teachers; Student.java文件: pr ...

  5. JPA开发(下)一(多)对多的配置与crud操作

    1 一对多案例(部门与员工) 1.1 实体类注解 1.2 级联添加.级联更新与级联删除 2 多对多案例(学生与教师) 2.1 实体类注解 2.2 级联添加.级联删除与级联更新 3 多表查询 资源下载 ...

  6. Hibernate实体映射配置1(java@注解方式)

    实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...

  7. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明

    1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...

  8. hibernate 的一对多关联关系映射配置

    hibernate 是操作实体类: 表是一对多的关系,当创建这2个实体的时候 在一的一方定义一个多的一方的集合 在多的一方定义一个一的一方的对象 表是多对多的关系,当创建这2个实体的时候 在互相中都有 ...

  9. hibernate中一对多关系的映射

    昨天初次接触hibernate,仅仅弄懂了一对一关系的映射.今天学习了一天又有了新的收获,弄懂了一对多之间关系的映射. 一.一对多的关系映射 建立一对多关系关系的表的原则是将一的一方的主键加入到多的一 ...

最新文章

  1. 区块链热度不断,那么究竟是泡沫还是未来?
  2. linux7安装pgsql数据库,在CentOS7系统上安装和配置PostgreSQL
  3. 有赞订单管理的三生三世与“十面埋伏”
  4. Oracle 11g 11201_RHEL5.5_RAC_VBOX 详细搭建步骤
  5. linux c通过文件描述符以及write和read方法对文件进行读写
  6. 信息学奥赛一本通(1242:网线主管)
  7. 数据结构堆栈 内存堆栈_了解堆栈数据结构
  8. python基于协程的网络库gevent、eventlet
  9. 应对需求变更的软件的设计——我的想法
  10. 打破定制化语音技术落地怪圈?从讲一口标准英音的语音助手说起
  11. 深度解析PHP数组函数array_combine
  12. 脱机使用打印机怎么删除缓存_如何在Windows中使用脱机文件来脱机缓存网络文件...
  13. 计算机关机界面卡住,Win7关机缓慢,关机后一直卡在正在关机界面
  14. 尚学堂Java全套资料百度云,Java注解和反射
  15. 车联网技术 应用场景 各个领域方向(大方向分析)
  16. uniapp抽奖组件-动画效果之各类抽奖(跳跃)
  17. 机器学习实验—K-MEANS聚类
  18. 创业必须的一些网站和博客导航
  19. 舒米,又夺冠了。。。。。
  20. 速读《现代软件工程----构建之法》有感

热门文章

  1. 目标人脸检测与识别(计算机视觉)
  2. 菜鸟收藏:什么是.rar文件?如何打开rar文件?_下载加速吧
  3. hbw-utils - GsonUtils
  4. 醉酒阿里P7分享并发编程套装,再说学不会就不是我的问题了
  5. 国赛latex方法快速检索(入门级)
  6. Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析
  7. Web追踪——CNAME Cloaking
  8. Excel中函数row和column的特殊应用
  9. 《孙子略解》曹操注-2011
  10. 普元EOS_工作流引擎相关数据表记录---工作流工作笔记002