cascade(级联)和inverse关系详解

本文详细解析了数据库中的外键概念,纠正了对外键常见误区,并深入探讨了级联(cascade)关系,包括级联的四种属性及其应用场景。同时,文章还介绍了inverse属性的作用,用于决定在一对多或多对多关系中哪一方负责维护关系,以优化性能。通过实例分析,帮助读者理解如何设置和使用这两个关键属性。
摘要由CSDN通过智能技术生成

 序言

        写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也看不懂其中的关系,所以我自己写博文的时候,会尽量用通俗通俗在通俗的语言去描述一个概念,希望能尽自己的力量去帮助你们理解。光看我的是不行的,最关键的是要自己动手去实践一遍,能得出一样的结论,那就说明懂了,在我不懂的时候,我就去自己实现它,一次次尝试,慢慢的就总结出规律了。

                                            --WH

 

一、外键

     我为什么要把这个单独拿出来说呢?因为昨天我才发现我自己对这个外键的概念原来理解偏差了,并且很多人估计和我一样,对这个东西理解错了,现在就来说说一个什么误区。

     1、这张表的外键是deptId把?  2、这张表有外键吗?

      大多数人这里说的外键,度是指的一张表中被外键约束的字段名称。这是很多人从一开始就默认的,其实并不然,

      解释:对于每张有外键约束这个约束关系的表,都会给这个外键约束关系取一个名字,从给表设置外键约束的语句中就可以得知。

          CONSTRAINT 外键名 FOREIGN KEY 被外键约束修饰的字段名 REFERENCES 父表名(主键)

        所以说,平常大多数人口中的外键,指的是被外键约束修饰的字段名,外键关系是有自己的名称的。这点大家需要搞清楚,虽然平常影响不大,但是到真正关键的地方,自己可能就会被这种小知识点给弄蒙圈。

 

 

二、cascade(级联)关系

      为什么要把这个单独拿出来讲一篇文章呢?因为我在看别人博文时,就把cascade和inverse和那几种关联关系连在一起讲了,并且是那种一笔带过的描述,写的比较简单,其实理解了确实很简单,但对于刚开始学的人来说,这将会是一个大的灾难,一知半解是最难受的了。

      解释:级联,就是对一个对象进行操作的时候,会把他相关联的对象也一并进行相应的操作,相关联的对象意思是指 比如前两节学的一对多关系中,班级跟学生,Student的实体类中,存在着Classes对象的引用变量,如果保存Classes对象的引用变量有值的话,则该值就是相关联的对象,并且在对student进行save时,如果保存Classes对象的引用变量有值,那么就会将Classes对象也进行save操作, 这个就是级联的作用。

      说大白话这个意思很难到位,举个员工和部门 双向一对多的例子把。

  创建实验环境(这个可以自己去实现一下,练习一下关联关系的配置)

  首先得对这两个表的关系图弄清楚,在接下来的所有分析中,度要带着这个关系去分析,你才不会蒙圈

              

Staff.java 和 Staff.hbm.xml

复制代码
public class Staff {
    private int id;
    private String name;
    private Dept dept;
。。。
}

//Staff.hbm.xml
<hibernate-mapping>
    <class name="oneToMany.Staff" table="staff">
        <id name="id" column="id">
        //设置的increment,这个应该看得懂, <generator class="increment"></generator> </id> <property name="name"></property> //name:staff实体类中的dept属性,column:子表中被外键约束修饰的字段名 class:Staff相关联的Dept类 <many-to-one name="dept" column="deptId" class="oneToMany.Dept"></many-to-one> </class> </hibernate-mapping>
复制代码

Dept.java 和 Dept.hbm.xml

复制代码
public class Dept {
    private int id;
    private String name;
    private Set<Staff> staffSet = new HashSet<Staff>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值