zoukankan      html  css  js  c++  java
  • hibernate笔记--cascade级联以及inverse属性

    cascade : 

      不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例,此标签下都有一个cascade属性:

      Grade.hbm.xml中:

    <set name="students" cascade="save-update">
            <key column="gradeId" ></key>
            <one-to-many class="Student"/>
        </set>

    Student.hbm.xml中:

    <many-to-one name="grade" class="Grade" column="gradeId" not-null="true" cascade="save-update"></many-to-one>

    cascade表示级联:让操作级联到子实体,常见的有以下几个取值:

    save-update:在保存和当前一端数据时,另一端数据可以一起保存.如上,假如Student.hbm.xml中设置了 cascade="save-update",那么在保存数据时,只需要保存Student就可以,hibernate会自动把它相关联的另一端的Grade的数据保存起来.

    none:不级联(不写就是默认不级联)

    delete:删除级联(不能在多的一端执行)

    all:表示所有操作都级联

    注意:

    1. cascade是级联操作,使得在一段操作数据时,可以级联操作在另外一端的数据
    2. 在多对一的关系中,多的一端不能操作级联为delete,一般在多的一端设为save-update
    3. 在一对多的关系中,如果一的一端设置为delete,多的一端不能指明外键为空

    inverse:

      在一的一端(Grade)的<set>标签中有一个inverse属性,:

    <set name="students" inverse="false">
            <key column="gradeId" ></key>
            <one-to-many class="Student"/>
    </set>

    inverse属性表示由谁来管理关联关系,默认为false.

    inverse="false":表示双方都可以管理关联关系,谁管理关系谁来维护,如果都管理了则双方都可以维护,当关系由多的一端(Student)来维护时,效率更高.因为如果关系由一的一端(Grade)来维护时,会多执行几个Update语句.

    inverse="true":表示由多的一端来管理关联关系,不管一的一端是否管理关系,都由多的一端来维护关系.建议设为"true".

      那么什么是管理关系呢? 假设Student中,执行了setGrade()方法时,将Grade实例赋给了Student实例,就表示Student类管理了关系,这到底什么意思呢?其实很简单,假如保存数据的时候,我们保存Student信息时,引用了Grade,那么保存时会维护Student和Grade的关系,即会在Student中存在Grade的外键值,否则,Student的外键值是为null的(当然前提是我们没有设置not-null="true"),

  • 相关阅读:
    [转] CNN工作步骤解析
    [转] Attention模型结构
    [转] Boost算法
    [转] GDBT详解
    [转] Noise Contrastive Estimation 噪声对比估计 资料
    [转] 对数似然与交叉熵
    [转] ELMO
    [转] Batch Normalization
    强化学习总结
    MySQL 与 Hive 逻辑相关
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5239170.html
Copyright © 2011-2022 走看看