zoukankan      html  css  js  c++  java
  • 关于 all-delete-orphan

    当关联双方存在父子关系,就可以在 set 处设定 cascade 为 all-delete-orphan

    所谓父子关系,即指由父方控制子方的持久化圣明周期,子方对象必须和一个父方对象关联。如果删除父方对象,应该级联删除所有关联的子方对象;如果一个子方对象不再和一个父方对象关联,应该把这个子方对象删除。

    all-deleteorphan 的能力:

    1. 当保存或更新父方对象时,级联保存或更新所有关联的子方对象,相当于 cascade 为 save-update

    2. 当删除父方对象时,级联删除所有关联的子方对象,相当于 cascade 为 delete

    3. 删除不再和父方对象关联的所有子方对象

    解除父子关系的 java 语句例如:

    customer.getOrders().remove(order);

    order.setCustomer(null);

    tx.commit();

    如果 cascade 属性取默认值 null,当解除父子关系时,会执行如下 sql:

    update ORDER set CUSTOMER_ID=null where ID=2

    如果要把它也删掉,则设置:

    <set   name="orders"  cascade="all-delete-orphan"  inverse="true">

    <key  column="CUSTOMER_ID"  />

    <one-to-many  class="mypack.Order" />

    再运行时就会执行:delete from ORDERS where CUSTOMER_ID=2  and ID=2;

    cascade几种取值:

    save-update:   级联保存(load以后如果子对象发生了更新,也会级联更新). 但它不会级联删除

    delete:              级联删除, 但不具备级联保存和更新

    all-delete-orphan: 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新.

    all:                     级联删除, 级联更新,但解除父子关系时不会自动删除子对象.

    delete-orphan:删除所有和当前对象解除关联关系的对象

    none:...

    级联保存和级联更新总是集合在一起的, 所以没单独的save 或 updata

    我通常会用到none,save-update,all-delete-orphan,而且还是在一对多和多对多的情况

    1. none就不用说了,在保存,更新,删除当前对象时,忽略其关联的对象
    2. save-update:在保存和更新当前对象的时候,级联保存,更新关联对象,在多对多的情况下用的很多,而且一般    不用于一对多,一对多我通常会采用none或者all-delete-orphan
    3. delete 删除当前对象,级联删除关联的对象,我从来单独没用过
    4. all 也就是save-update+delete,另外对当前对象执行evict和lock时对关联对象也执行evict和lock,我从来没单独用过
    5. delete-orphan 删除所以和当前对象解除关联的对象,我从来没单独用过
    6. all-delete-orphan 也就是all+delete-orphan,根据需求,我在一对多中经常使用
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/elim/p/3691441.html
Copyright © 2011-2022 走看看