Cascade delete在FitU

编程入门 行业动态 更新时间:2024-10-26 08:28:21

<a href=https://www.elefans.com/category/jswz/34/1753553.html style=Cascade delete在FitU"/>

Cascade delete在FitU

在many-to-many/one-to-many中有这样的常规需求:删除一端时只删除对应的关系和本身,当然这个需求在硬编码中实现起来是方便的,但是当在框架中实现,希望得到最高程度的重用的时候,就会遇到一些小麻烦。FitU-Thinking已经解决了这个问题。

以FitU中的app为例(相关代码可以参考),三个Model: Role, UserGroup, User. Role和UserGroup之间存在one-to-many的关系;UserGroup和User之间存在many-to-many的关系。Fitu的CRUD是可以重用,不同的UseCase可以不必写这些累赘的代码。 

先说明Role和UserGroup。我们方便的实现了新增,修改,以及关联,甚至是对UserGroup的删除,但是在我们删除Role的时候遇到了FK问题,当我们将cascade配置成All的时候,删除Role会将其下相关的UserGroup删除,但是往往用户并不希望删除UserGroup,所以单纯的remove(clazz, id)没有办法满足到这种需求,所以扩展了一下:remove(model, id, {"groups", "role"}),只是在Action中必须重新实现remove(要多写几行代码)。

UserGroup和User也是类似的在级联删除的时候遇到了问题,关系是由UserGroup维护的,当删除UserGroup时会自动的将其和User的关系断开,但是当删除User的时候,FK异常又出现了,当然我必须满足级联更新和保存。此时也是需要重新实现remove方法的。

这种先断开关系,再删除对象的功能在Hibernate中实现起来是这样:找出Model中的关系对象集,然后遍历关系对象集将其中的model对象(或对象集)设空,这样就实现了关系断开,然后再调用remove(modelClass, id),就可以将Model删除了,而不会遇到FK冲突。详细实现可以参看ThinkingService.

更多推荐

Cascade delete在FitU

本文发布于:2024-03-10 04:33:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727023.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Cascade   delete   FitU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!