`

Cascade delete在FitU-Thinking中的解决方法

    博客分类:
  • 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.

分享到:
评论

相关推荐

    hibernate_配置cascade_及all-delete-orphan.doc

    - 如果希望在解除关系的同时删除子实体,则需要显式地设置`cascade`属性为`all-delete-orphan`,并添加相应的配置: ```xml <set name="orders" cascade="all-delete-orphan" inverse="true"> <one-to-many ...

    PyPI 官网下载 | django-postgres-delete-cascade-2.0a1.tar.gz

    标题中的“PyPI 官网下载 | django-postgres-delete-cascade-2.0a1.tar.gz”表明这是一个从Python Package Index(PyPI)官方源获取的软件包,名为“django-postgres-delete-cascade”。这个软件包的版本是2.0a1,...

    天津大学2017级软件工程计算机视觉课程大作业,,基于改进Cascade_-Cascade-RCNN-.zip

    天津大学2017级软件工程计算机视觉课程大作业,,基于改进Cascade_-Cascade-RCNN-

    深度学习三维重建 cascade-MVSNet-CVPR-202(源码、原文、译文)

    cascade-MVSNet——CVPR-202(源码、原文、译文) cascade-MVSNet——CVPR-202(源码、原文、译文) cascade-MVSNet——CVPR-202(源码、原文、译文) cascade-MVSNet——CVPR-202(源码、原文、译文) cascade-...

    CASCADE 6.4\CASCADEDesignSoftware-SpectrumMicrowave.exe

    计算射频链路的级联特性,计算射频接收和发射的链路计算,包括噪声系数、架构设计、指标分解、电路、增益设计等。

    Spectrum Microwave Cascade7.0-RF级联频谱分析.rar

    在RF系统设计中,Spectrum Microwave Cascade 7.0是不可或缺的工具,它通过精确计算和分析噪声系数、OIP3、输出频谱和杂散,为工程师提供了一套全面的解决方案,以提升系统性能和可靠性。无论是对于学术研究还是工业...

    haarcascade-frontalface-alt haarcascade-frontalface-alt2

    需要注意的是,尽管 OpenCV 提供了多种预训练的分类器(如 `haarcascade-frontalface-alt` 和 `haarcascade-frontalface-alt2`),但在实际应用中可能需要根据具体情况自行训练模型以获得更佳的性能。 在训练过程中...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    在提供的代码示例中,`<many-to-one>` 标签中包含了 `cascade` 属性的注释示例,但是没有真正使用它。如果使用 `cascade="save-update"`,那么当保存 `User` 对象时,其关联的 `Group` 对象也会被保存或更新。 ####...

    haarcascade-russian-plate-number.xml.zip

    标题 "haarcascade-russian-plate-number.xml.zip" 指的是一个OpenCV库中的预训练分类器模型,专门用于检测俄罗斯车辆的车牌号码。这个压缩包包含了一个名为 "haarcascade_russian_plate_number.xml" 的文件,这是一...

    cascade-function-.rar_cascade

    在这个场景中,"cascade-function-.rar_cascade" 提供的是一种实现省市级联功能的Java脚本,主要用于Web开发,尤其是前端部分。Dreamweaver是一款流行的Web设计和开发工具,它支持多种编程语言,包括HTML、CSS、...

    haarcascade-frontalface-alt-tree.xml.zip

    标题 "haarcascade-frontalface-alt-tree.xml.zip" 指的是一个OpenCV库中用于面部检测的预训练模型文件的压缩包。OpenCV(开源计算机视觉库)是一个跨平台的计算机视觉和机器学习软件库,它包含了各种用于处理图像和...

    人脸锁定haarcascade-frontalface-default.xml

    标题中的“人脸锁定haarcascade-frontalface-default.xml”指的是OpenCV库中用于人脸识别的一个预训练模型文件。这个模型是基于Haar特征级联分类器的,它被广泛应用于计算机视觉领域的人脸检测任务。在Python环境下...

    haarcascade-frontalface-alt.xml.zip

    标题中的"haarcascade-frontalface-alt.xml.zip"是一个压缩包文件,其中包含了OpenCV库的一个面部检测模型。OpenCV(开源计算机视觉库)是一个强大的工具,广泛应用于图像处理和计算机视觉领域。这个模型,"haar...

    opencv识别车牌haarcascade-licence-plate-rus-16stages.xml

    总的来说,"haarcascade-licence-plate-rus-16stages.xml" 是OpenCV中用于识别俄罗斯车牌的预训练模型,它结合了Haar特征、级联分类器和Adaboost算法,为实时的车牌检测提供了高效的解决方案。在实际应用中,开发者...

    CascadeTrainerGUI_3.3.1_x64_Setup.rar

    在本节中,描述了Cascade Trainer GUI的不同部分和功能。请注意,通过将鼠标移到图形界面上的每个元素,您将在底部状态栏上获得对其的简短描述。 首次启动Cascade Trainer GUI时,将显示以下屏幕。这是开始屏幕,...

    haarcascade-frontalface-alt人脸识别分类器文件

    总的来说,"haarcascade-frontalface-alt.xml"是OpenCV提供的一种高效的人脸检测工具,通过预训练的级联分类器,可以在实时视频或图像中快速准确地定位人脸。尽管现代深度学习技术在人脸识别方面有更高的准确率,但...

    Real-time vehicle detection with foreground-based cascade classifier

    在本文的方法中,级联分类器被设计成只在前景区域工作,进一步加速了整个检测过程。 #### 实验结果与评估 该算法在公共数据集上进行了评估,结果显示其具有很高的准确性和实时性能。通过对不同光照条件、遮挡程度...

    OpenCV haarcascade-eye-tree-eyeglasses.xml-haarcascadeeyetree

    在给定的标题"OpenCV haarcascade-eye-tree-eyeglasses.xml-haarcascadeeyetree"中,提到的核心概念是OpenCV的haar级联分类器,特别是针对眼睛和眼镜的检测。 Haar级联分类器是OpenCV中一种用于对象检测的算法,...

    haarcascade-licence-plate-rus-16stages.xml.zip

    标题中的"haarcascade-licence-plate-rus-16stages.xml.zip"是指一个用于识别俄罗斯车牌的OpenCV Haar级联分类器文件的压缩包。OpenCV(开源计算机视觉库)是一个强大的图像处理和计算机视觉库,广泛应用于图像识别...

    haarcascade-eye-tree-eyeglasses.xml

    haarcascade_eye_tree_eyeglasses.xml OpenVC haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haarcascade_...

Global site tag (gtag.js) - Google Analytics