如何使用Xodus DNQ级联删除最后一个链接的项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Xodus DNQ级联删除最后一个链接的项目相关的知识,希望对你有一定的参考价值。
我有两个实体; municipality
和city
(实际上更多,但此处简化)。 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具有两种机制:XdEntityListener
或XdEntity#beforeFlush
。它们都可以在这里应用。对于beforeFlush
:
以上是关于如何使用Xodus DNQ级联删除最后一个链接的项目的主要内容,如果未能解决你的问题,请参考以下文章
MQTT---HiveMQ源码详解(外传)为什么使用Xodus