一、关系表达

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框架学习(六)——一对多&多对一关系的更多相关文章

  1. hibernate框架学习笔记9:多对多关系案例

    员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...

  2. hibernate框架学习笔记8:一对多关系案例

    两个实体类:客户与联系人,一个客户可以有多个联系人 客户类: package domain; import java.util.HashSet; import java.util.Set; //客户实 ...

  3. JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

    JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...

  4. SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份

    SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...

  5. Hibernate框架学习(七)——多对多关系

    一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 在User.hbm.xml中添加: 在Role.hbm.xml中添加(与上相反): 二.操作关联属性 1.保存员工及角色 pu ...

  6. Hibernate框架学习之注解配置关系映射

         上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一 ...

  7. [ SSH框架 ] Hibernate框架学习之三

    一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...

  8. [ SSH框架 ] Hibernate框架学习之四(JPA)

    一.JPA概述以及它和Hibernate之间的关系 1.1.Hibernate 概述 JPA Java Persistence API,是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口), ...

  9. Hibernate框架学习笔记

      Hibernate 是一个 JDO( Java Data Objects)工具.它的工作原理是通过文件把值对象(Java对象)和 数据库表之间建立起一个映射关系,还提供数据查询和获取数据的方法. ...

随机推荐

  1. Kafka学习笔记(4)----Kafka的Leader Election

    1. Zookeeper的基本操作 zookeeper中的节点可以持久化/有序的两个维度分为四种类型: PERSIST:持久化无序(保存在磁盘中) PERSIST_SEQUENTIAL:持久化有序递增 ...

  2. 基于 vue2 导航栏透明渐变

    在移动或者app 中经常会用,顶部导航栏固定,但是随着页面向上滚动,导航栏的透明度发生变化. 做法为: 1.首先给要滚动变化的导航添加 :style="style" <mt- ...

  3. css常用代码大全以及css兼容(转载)

    css常见的快捷开发代码汇总(长期更新),包括CSS3代码,有一些css效果很顽固,经常会一时找不出解决方案,网络上也有很多的工具和高手提供了具体的浏览器兼容代码,这个页面我今后会经常整理,希望能够帮 ...

  4. Windows Server 2012安装.net framework3.5(转)

    1.先下载WIN2012R2安装NET3.5的专用数据源 https://pan.baidu.com/s/1bqiUTyR 提取码h09k 并解压,比如解压到桌面,解压后的路径为C:\Users\Ad ...

  5. GDI 设备环境句柄(2)

    WM_PAINT 消息的触发 Windows 程序在以下情况会触发WM_PAINT消息: 窗口被移动导致被遮盖部分暴露出来 用户调整窗口的大小(当窗口类的 style 字段被设置为 CS_HREDRA ...

  6. 【2018集训队互测】【XSY3372】取石子

    题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...

  7. keepalived实现IP地址高可用

    yum -y install keepalived vim /etc/keepalived/keepalived.conf global_defs { router_id LVS_DEVEL_ngin ...

  8. 在 Windows10 系统中安装 Homestead 本地开发环境

    在 windows10 系统中安装 homestead 本地开发环境 在 windows10 环境下安装 homestead 开发环境,网上有很多相关教程其中大多都是 mac 环境,很多大神都是用户的 ...

  9. ConcurrentHashMap 并发HashMap原理分析

        ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁.如图   左边便是Hashtable的实现方式---锁整个hash表:而右边则是Concurrent ...

  10. @Bean 指定初始化和销毁方法

    bean 的生命周期 bean 的创建 --> 初始化 --> 销毁 ioc 容器管理 bean 的声明周期 可以自定义初始化和销毁方法 构造器( 对象创建 )被调用时机 单实例:在容器启 ...