Hibernate框架学习(六)——一对多&多对一关系
一、关系表达
1、表中的表达

2、实体中的表达

3、orm元数据中的表达
一对多:(在Customer.hbm.xml中添加)

多对一:(在LinkMan.hbm.xml中添加)

最后别忘了在hibernate.cfg.xml中添加映射文件

二、操作关联属性
1、保存客户及客户下的联系人
public class Demo {
@Test
//保存客户以及客户下的联系人
public void fun1(){
//1.获得session
Session session = HibernateUtils.openSession();
//2.开启事务
Transaction tx= session.beginTransaction();
//3.操作
//=================================
Customer c=new Customer();
c.setCust_name("华为");
LinkMan lm1=new LinkMan();
lm1.setLkm_name("任正非");
LinkMan lm2=new LinkMan();
lm2.setLkm_name("孙亚芳");
//表达一对多,客户下有多个联系人
c.getLinkMens().add(lm1);
c.getLinkMens().add(lm2);
//表达多对一,联系人属于哪个客户
lm1.setCustomer(c);
lm2.setCustomer(c);
session.save(c);
session.save(lm1);
session.save(lm2);
//=================================
//4.提交事务
tx.commit();
//5.关闭资源
session.close();
}
}
查看数据库(cst_customer和cst_linkman表结果如下)


2、为客户增加联系人(只需要改变步骤三操作里的内容)
//1>获得要操作的客户对象
Customer c = session.get(Customer.class,4l);
//2>创建联系人
LinkMan lm1=new LinkMan();
lm1.setLkm_name("尹绪全");
//3>将联系人添加到客户,再将客户设置到联系人中
c.getLinkMens().add(lm1);
lm1.setCustomer(c);
//4>执行保存
session.save(lm1);
3、为客户删除联系人(依然只需要改变步骤三操作里的内容)
//1>获得要操作的客户对象
Customer c = session.get(Customer.class, 4l);
//2>获得要移除的联系人
LinkMan lm1=session.get(LinkMan.class, 3l);
//3>将联系人从客户集合中移除
c.getLinkMens().remove(lm1);
lm1.setCustomer(null);
三、进阶操作
1、级联操作(简化操作,一定要用save-update,不建议使用delete)
比方说级联保存更新时,配置文件修改好后可以省略最后联系人的保存操作。

2、关系维护(性能优化,提高关系维护的性能)
问题:在保存时,两方都会维护外键关系,关系维护两次,冗余了。
多余的维护关系语句是客户这一端在维护。

解决:

原则:无论怎么放弃,总有一方必须要维护关系。
一对多的关系中:一的一方放弃,只能一的一方放弃,多的一方不能放弃(外键字段就在多的一方,不能不维护自己的列)。
3、执行删除客户操作时,不能直接删除

Hibernate框架学习(六)——一对多&多对一关系的更多相关文章
- hibernate框架学习笔记9:多对多关系案例
员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...
- hibernate框架学习笔记8:一对多关系案例
两个实体类:客户与联系人,一个客户可以有多个联系人 客户类: package domain; import java.util.HashSet; import java.util.Set; //客户实 ...
- JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析
JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...
- SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份
SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...
- Hibernate框架学习(七)——多对多关系
一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 在User.hbm.xml中添加: 在Role.hbm.xml中添加(与上相反): 二.操作关联属性 1.保存员工及角色 pu ...
- Hibernate框架学习之注解配置关系映射
上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一 ...
- [ SSH框架 ] Hibernate框架学习之三
一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...
- [ SSH框架 ] Hibernate框架学习之四(JPA)
一.JPA概述以及它和Hibernate之间的关系 1.1.Hibernate 概述 JPA Java Persistence API,是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口), ...
- Hibernate框架学习笔记
Hibernate 是一个 JDO( Java Data Objects)工具.它的工作原理是通过文件把值对象(Java对象)和 数据库表之间建立起一个映射关系,还提供数据查询和获取数据的方法. ...
随机推荐
- 【技术累积】【点】【java】【8】maven常用命令(持续更新)
建立 mvn archetype:generate -DgroupId=com.andy.test -DartifactId=test-project -Dversion=0.0.1-SNAPSHOT ...
- java 常用API
package com.orcal.demc01; public class Regex { public static void main(String[] args) { // TODO Auto ...
- 序列模型(2)-----循环神经网络RNN
一.RNN的作用和粗略介绍: RNN可解决的问题: 训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字.这些序列比较长,且长度不一,比较难直接的拆分 ...
- Python笔记6----数组
1.Python 中的数组 形式: 用list和tuple等数据结构表示数组 一维数组:list=[1,2,3,4] 二维数组:list=[[1,2,3],[4,5,6],[7,8,9]] 用arra ...
- Linux的环境中如何生成srw-rw---- 的文件权限?
文件属性 d 开头是: 目录文件. l 开头是: 符号链接(指向另一个文件,类似于瘟下的快捷方式). s 开头是: 套接字文件(sock). b 开头是: 块设备文件,二进制文件. c 开头是: 字符 ...
- C++基础 (7) 第七天 多态的原理 纯虚函数和抽象类 依赖倒置原则
1 昨日回顾 2 多态的原理 1 要有继承 2 要有子类重写父类的虚函数 3 父类指针(或者引用)指向子类对象 (动态联编 虚函数表 3 证明vptr指针的存在 4 vptr指针在构造父类的时候是分步 ...
- 网络教程(10)回顾ARP和ping数据包
Ping 192.168.20.2 ICMP Echo (Internet Control Message Protocol ICMP Echo request ICMP Echo reply 收到I ...
- HDU1058 - Humble Numbers
A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, ...
- python开发项目:学生选课系统
程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...
- 《你又怎么了我错了行了吧》【Alpha】Scrum meeting 2
第二天 日期:2019/6/15 前言: 第2次会议在9C-405召开 进行第一天工作的检查,开始第二天工作的安排和学习 1.1 今日完成任务情况以及明天任务安排 姓名 当前阶段任务 下一阶段任务 刘 ...