mysql外键约束:

  1. 外键约束是对主表更新和删除被关联键时的约束,这里从表可以随意进行更新和删除外键,而主表不能随意,如果主表要更新或删除被关联键,而这个键与从表中的外键已经关联,那需要参考从表创建外键时设定的更新删除策略,包括四种:restrict(如果从表有相关数据,那主表不能更新或删除数据)、cascade(从表相关数据行一同更新或删除)、set null(从表相关数据行对应外键列为null)、no action(同restrict);

  2. 从表插入新数据时,从表中的外键值在主表中没有对应值时不能进行插入,或者可以插入null;

  3. 在建立外键时,从表中的外键可以引用主表中有索引的列,注意不一定非得是主表的主键;

  4. 两个表之间可以建立多个外键,比如两个表A和B, B表中可以建立多个外键分别引用到A表中的不同列,与此同时,A表中也可以创建多个外键引用到B表中的不同列,外键的添加没有太多限制,甚至两个列可以互为外键,但这貌似没什么意义,而且插入时只能插入null。

hibernate cascade:

它是两个表的级联操作,是由hibernate完成,与外键约束没有太大关系。无论在哪张表设置cascade,当该表被操作时,都会根据cascade的设置去对另一张表进行相应的操作。

cascade关系有以下几种

          all: 所有情况下均进行关联操作,即save-update和delete。
          none: 所有情况下均不进行关联操作。这是默认值。
          save-update: 在执行save/update/saveOrUpdate时进行关联操作。
          delete: 在执行delete 时进行关联操作。
          all-delete-orphan:
当一个节点在对象图中成为孤儿节点时(从表中的一条数据不再与主表有关联时,即外键值为null时),删除该节点

hibernate inverse:(双向关联中使用,为的是不让同一件事做两遍而导致性能下降的问题)

1、inverse的权限在cascade之上,意思就是cascade是否有用,还得看inverse这个属性

2、inverse的作用:在映射关系中,让其中一方去维护关系,好处就是能提高性能,不用重复维护。维护两种关系,看下

  2.1 控制级联关系是否有效

    cascade是否有效,就得看inserve的值,如果是自己方来维护关系,那么cascade就有效,反之无效

  2.2 控制外键关系

    这个就得通过让自己拥有对方的实例引用(可能是set,也可能就是单个存储对象的变量),这样才具备控制外键关系的能力,然后看inserve的值,

3、inverse只能在一的一方设置,并且默认值是true,也就是说,不设置inverse时,默认是让多的一方去维护关系,这种一般是在双向、外键关系中才设置inverse的值,如果是单向的,就只有一方有维护关系的权利。