У меня есть две сущности; 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 }
}
}