技术分析之Hibernate的关联关系映射之一对多映射(重点)
    
    1. JavaWEB中一对多的设计及其建表原则
    
    2. 先导入SQL的建表语句
       
        * 在资料中找到客户和联系人的SQL脚本
    
    3. 编写客户和联系人的JavaBean程序(注意一对多的编写规则)
        * 客户的JavaBean如下

   public class Customer {
private Long cust_id;
private String cust_name;
private Long cust_user_id;
private Long cust_create_id;
private String cust_source;
private String cust_industry;
private String cust_level;
private String cust_linkman;
private String cust_phone;
private String cust_mobile; private Set<Linkman> linkmans = new HashSet<Linkman>(); } * 联系人的JavaBean如下
public class Linkman {
private Long lkm_id;
private String lkm_name;
private String lkm_gender;
private String lkm_phone;
private String lkm_mobile;
private String lkm_email;
private String lkm_qq;
private String lkm_position;
private String lkm_memo; private Customer customer; }

    4. 编写客户和联系人的映射配置文件(注意一对多的配置编写)
        * 客户的映射配置文件如下

  <class name="com.itheima.domain.Customer" table="cst_customer">
<id name="cust_id" column="cust_id">
<generator class="native"/>
</id>
<property name="cust_name" column="cust_name"/>
<property name="cust_user_id" column="cust_user_id"/>
<property name="cust_create_id" column="cust_create_id"/>
<property name="cust_source" column="cust_source"/>
<property name="cust_industry" column="cust_industry"/>
<property name="cust_level" column="cust_level"/>
<property name="cust_linkman" column="cust_linkman"/>
<property name="cust_phone" column="cust_phone"/>
<property name="cust_mobile" column="cust_mobile"/> <set name="linkmans">
<key column="lkm_cust_id"/>
<one-to-many class="com.itheima.domain.Linkman"/>
</set>
</class>

     * 联系人的映射配置文件如下

   <class name="com.itheima.domain.Linkman" table="cst_linkman">
<id name="lkm_id" column="lkm_id">
<generator class="native"/>
</id>
<property name="lkm_name" column="lkm_name"/>
<property name="lkm_gender" column="lkm_gender"/>
<property name="lkm_phone" column="lkm_phone"/>
<property name="lkm_mobile" column="lkm_mobile"/>
<property name="lkm_email" column="lkm_email"/>
<property name="lkm_qq" column="lkm_qq"/>
<property name="lkm_position" column="lkm_position"/>
<property name="lkm_memo" column="lkm_memo"/> <many-to-one name="customer" class="com.itheima.domain.Customer" column="lkm_cust_id"/>
</class>

技术分析之保存客户和联系人的数据
   
    
技术分析之级联保存
    
    1. 测试:如果现在代码只插入其中的一方的数据
        * 如果只保存其中的一方的数据,那么程序会抛出异常。
        * 如果想完成只保存一方的数据,并且把相关联的数据都保存到数据库中,那么需要配置级联!!
    
        * 级联保存是方向性
    
    2. 级联保存效果
        * 级联保存:保存一方同时可以把关联的对象也保存到数据库中!!
        * 使用cascade="save-update"

技术分析之级联删除
    
    1. 先来给大家在数据库中演示含有外键的删除客户功能,那么SQL语句是会报出错误的
        * 例如:delete from customers where cid = 1;
    
    2. 如果使用Hibernate框架直接删除客户的时候,测试发现是可以删除的
    
    3. 上述的删除是普通的删除,那么也可以使用级联删除,注意:级联删除也是有方向性的!!
        * <many-to-one cascade="delete" />
    
----------
    
技术分析之级联的取值(cascade的取值)和孤儿删除
    
    1. 需要大家掌握的取值如下
        * none                        -- 不使用级联
        * save-update                -- 级联保存或更新
        * delete                    -- 级联删除
        * delete-orphan                -- 孤儿删除.(注意:只能应用在一对多关系)
        * all                        -- 除了delete-orphan的所有情况.(包含save-update delete)
        * all-delete-orphan            -- 包含了delete-orphan的所有情况.(包含save-update delete delete-orphan)
    
    2. 孤儿删除(孤子删除),只有在一对多的环境下才有孤儿删除
        * 在一对多的关系中,可以将一的一方认为是父方.将多的一方认为是子方.孤儿删除:在解除了父子关系的时候.将子方记录就直接删除。
        * <many-to-one cascade="delete-orphan" />

技术分析之让某一方放弃外键的维护,为多对多做准备
    
    1. 先测试双方都维护外键的时候,会产生多余的SQL语句。
        * 想修改客户和联系人的关系,进行双向关联,双方都会维护外键,会产生多余的SQL语句。
        
        * 产生的原因:session的一级缓存中的快照机制,会让双方都更新数据库,产生了多余的SQL语句。
    
    2. 如果不想产生多余的SQL语句,那么需要一方来放弃外键的维护!
        * 在<set>标签上配置一个inverse=”true”.true:放弃.false:不放弃.默认值是false
        * <inverse="true">

技术分析之cascade和inverse的区别

1. cascade用来级联操作(保存、修改和删除)
    2. inverse用来维护外键的

 Hibernate的关联关系映射之多对多映射

技术分析之多对多的建表原则

技术分析之多对多JavaBean的编写
    
    1. 编写用户和角色的JavaBean
        * 用户的JavaBean代码如下

  public class User {
private Long user_id;
private String user_code;
private String user_name;
private String user_password;
private String user_state; private Set<Role> roles = new HashSet<Role>();
}

 * 角色的JavaBean代码如下

   public class Role {
private Long role_id;
private String role_name;
private String role_memo; private Set<User> users = new HashSet<User>();
}

    2. 用户和角色的映射配置文件如下
        * 用户的映射配置文件如下

 <class name="com.itheima.domain.User" table="sys_user">
<id name="user_id" column="user_id">
<generator class="native"/>
</id>
<property name="user_code" column="user_code"/>
<property name="user_name" column="user_name"/>
<property name="user_password" column="user_password"/>
<property name="user_state" column="user_state"/> <set name="roles" table="sys_user_role">
<key column="user_id"/>
<many-to-many class="com.itheima.domain.Role" column="role_id"/>
</set>
</class>

* 角色的映射配置文件如下

 <class name="com.itheima.domain.Role" table="sys_role">
<id name="role_id" column="role_id">
<generator class="native"/>
</id>
<property name="role_name" column="role_name"/>
<property name="role_memo" column="role_memo"/> <set name="users" table="sys_user_role">
<key column="role_id"/>
<many-to-many class="com.itheima.domain.User" column="user_id"/>
</set>
</class>

   3. 多对多进行双向关联的时候:必须有一方去放弃外键维护权

技术分析之多对多的级联保存
    
    1. 级联保存
        * <set cascade="save-update">

**级联删除(在多对多中是很少使用的)**

Hibernate的关联关系映射的更多相关文章

  1. Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

    1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信 ...

  2. 框架之 hibernate之关联关系映射

    案例:完成CRM的联系人的保存操作 需求分析 1. 因为客户和联系人是一对多的关系,在有客户的情况下,完成联系人的添加保存操作 技术分析之Hibernate的关联关系映射之一对多映射(重点) 1. J ...

  3. Hibernate 实体关联关系映射【转】

    Hibernate关联关系映射目录│ ├─单向关联│  ├─  一对一外键单向关联│  ├─  一对一主键单向关联│  ├─  一对一连接表单向关联│  ├─  一对多外键单向关联│  ├─  一对多 ...

  4. Hibernate 实体关联关系映射----总结

    在我看来,Hibernate提供这些映射关系,常用就是一对一和多对一,并且在能不用连接表的时候尽量不要用连接表.多对多会用到,如果用到了,应该首先考虑底层数据库设计是否合理.   在实际开发中,在Hi ...

  5. Hibernate之关联关系映射(一对多和多对一映射,多对多映射)

    ~~~接着之前的Hibernate框架接着学习(上篇面试过后发现真的需要学习一下框架了,不然又被忽悠让去培训.)~~~ 1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射: 1.1: ...

  6. Hibernate 实体关联关系映射(转载)

    原文链接地址:http://lavasoft.blog.51cto.com/62575/39398/ Hibernate:Hibernate关联关系映射实例速查   Hibernate关联关系映射目录 ...

  7. Hibernate学习---关联关系映射

    关联关系是用到的最多的一种关系,非常重要,在内存中反映为实体关系,映射到DB中主键外键关系,实体间的关联,即对外键的维护,关联关系的发生,即对外键数据的改变. 在这里就不赘述什么是外键什么是主键了. ...

  8. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...

  9. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

随机推荐

  1. 《TCP/IP - TCP/UDP》

    一:概述 - 由于 IP 的传输是无状态的,IP 提供尽力服务,但并不保证数据可以到达主机. - 所以,数据的完整性需要更上层的 传输层来保证.TCP和UDP 均属于 传输层. 二:UDP - 特点 ...

  2. [hdu 4841]圆桌问题 | 约瑟夫问题 STL-vector

    原题 问题描述: 经典的约瑟夫问题,有2n个人,其中n个好人n个坏人,使得删去n人后,剩下的全为好人.m为每次数的人数. n<=32767 题解: 首先考虑n的范围,暴力肯定行不通,所以会想到线 ...

  3. 1.RabbitMQ工作模型与基本原理

        1.了解 MQ 的本质和 RabbitMQ 的特性: 2.掌握 RabbitMQ 的 Java API 编程和 Spring 集成 RabbitMQ 1. MQ 了解 1.1. 消息队列简介 ...

  4. MySQL必知必会3

    创建和操纵表 创建表 输入 CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT N ...

  5. Numpy学习笔记(上篇)

    目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...

  6. iOS核心动画(基础篇)

    Core Animation相关内容基本介绍 此框架把屏幕上的内容组合起来,这个内容被分解成图层,放到图层树中,这个树形成了你能在应用程序看到的内容的基础 图层在iOS中就是CALayer类 当我们创 ...

  7. GOF 的23种JAVA常用设计模式总结 01 设计模式的概念分类和功能

    1.简介 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.它描述了在软件设计过程中的一些不断重复发生的 ...

  8. java之struts2的数据处理

    这里的数据处理,指的是页面上的数据与Action中的数据的处理. struts2中有3种方式来接收请求提交的数据.分别是:属性驱动方式.对象驱动方式.模型驱动方式 1. 属性驱动方式 要求页面中的表单 ...

  9. PDF时间戳 服务器

    好用权威免费的PDF文件数字签名时间戳服务器URL http://tss.pki.gva.es:8318/tsa

  10. 【洛谷 P1641】 [SCOI2010]生成字符串(Catalan数)

    题目链接 可以看成在坐标系中从\((0,0)\)用\(n+m\)步走到\((n+m,n-m)\)的方案数,只能向右上\((1)\)或者右下\((0)\)走,而且不能走到\(y=-1\)这条直线上. 不 ...