如何使用Xodus DNQ级联删除最后一个链接的项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Xodus DNQ级联删除最后一个链接的项目相关的知识,希望对你有一定的参考价值。

我有两个实体; municipalitycity(实际上更多,但此处简化)。 municipality必须始终至少包含一个城市。

是否有一种设置约束的方法,该约束使得最终的city级联删除也可以删除其父级municipality


实体

class XdCity(entity: Entity) : XdEntity(entity) {
    companion object : XdNaturalEntityType<XdCity>()

    var name by xdRequiredStringProp()
    var municipality: XdMunicipality by xdLink1(
        XdMunicipality::cities,
        onDelete = OnDeletePolicy.CLEAR,
        onTargetDelete = OnDeletePolicy.CASCADE
    )
}
class XdMunicipality(entity: Entity) : XdEntity(entity) {
    companion object : XdNaturalEntityType<XdMunicipality>()

    var name by xdRequiredStringProp(unique = true)
    val cities by xdLink1_N(
        XdCity::municipality,
        onDelete = OnDeletePolicy.CASCADE,
        onTargetDelete = OnDeletePolicy.CLEAR
    )
}

测试用例

@Test
fun testCityDeletionCascade() {
    Database.store.transactional {
        val municipality = XdMunicipality.findOrNew("Mun 1")
        XdCity.findOrNew("City A").apply {
            this.municipality = municipality
        }
        XdCity.findOrNew("City B").apply {
            this.municipality = municipality
        }
    }

    Database.store.transactional { 
        XdCity.all().first().delete()
        assertTrue { XdMunicipality.all().isNotEmpty }

        XdCity.all().first().delete()            
        assertTrue { XdMunicipality.all().isEmpty }
    }
}
答案

Xodus-dnq具有两种机制:XdEntityListenerXdEntity#beforeFlush。它们都可以在这里应用。对于beforeFlush

以上是关于如何使用Xodus DNQ级联删除最后一个链接的项目的主要内容,如果未能解决你的问题,请参考以下文章

MQTT---HiveMQ源码详解(外传)为什么使用Xodus

Java Spring boot hibernate删除级联数据

如何理解access设置中的“级联更新”和“级联删除”?

如何在 SQL Server 中使用级联删除?

如何在有循环和多个级联路径的情况下配置级联删除

Elementelementui的Cascader 级联选择器,在懒加载的时候数据无法回显的解决方案