频道
bg

Hibernate中的关联实体的删除

coding九月 24, 20171mins
Hibernate

在删除一个有关联的对象时,Hibernate的处理逻辑是这样的

  1. 解除所有自己维护的关系,通常是如果有别人引用自己,则把对方的外键设置为空, 这就要求外键不能有非空约束,否则会报外键约束错误;自己引用别人则无需处理。如果被解除关联的关联设置了orphanRemove属性,则接着删除关联的实体。

    bash

    UPDATE ASSOCIATION
    [DELETE ASSOCIATION]
  2. 对于不属于自己维护的关联,查看是否有orphanRemove属性,如果有则直接删除关联的实体。(因为自己不负责维护,只能让关联的实体删除自己)

    bash

    DELETE ASSOCIATION
  3. 查找设置了级联的关联,级联处理的时候会优先删除关联的对象。

    bash

    DELETE ASSOCIATION
  4. 删除自身

    bash

    DELETE OWN

需要注意的是,如果实体自身不负责维护一个关联关系,那么Hibernate就不会就解除关联。这个时候,要么设置了orphanRemove来让框架不得不把关联的实体删除;或者设置了级联删除,让框架先删除关联的实体。否则,不删除关联的实体,最终直接删除自身,就会报外键被引用的错误。

评论


新的评论

匹配您的Gravatar头像

Joen Yu

@2022 JoenYu, all rights reserved. Made with love.