У меня есть две сущности в отношениях «один ко многим». Единица «Один» владеет жизненным циклом «Множество». Если сущность «Один» удалена, я хочу, чтобы все сущности «Множество», принадлежащие «Единице», были удалены автоматически.
Я предполагаю, что есть способ установить ссылку как "CascadeType.DELETE", как в Hibernate, поэтому мне не нужно удалять все "Many" перед удалением "One".
object Apis : IntIdTable() {
val name = varchar("name", 20)
val url = varchar("url", 255)
val method = enumerationByName("method", 20, HttpMethod::class)
val requestBody = varchar("request_body", 65535)
val responseDsl = varchar("response_dsl", 65535)
val responseType = enumerationByName("response_type", 20, ResponseType::class)
val enabled = bool("enabled")
}
class Api(id: EntityID<Int>) : IntEntity(id){
companion object : IntEntityClass<Api>(Apis)
var name by Apis.name
var url by Apis.url
var method by Apis.method
var requestBody by Apis.requestBody
var responseDsl by Apis.responseDsl
var responseType by Apis.responseType
var enabled by Apis.enabled
val headers by ApiHeader referrersOn ApiHeaders.id
}
object ApiHeaders : IdTable<Int>() {
override val id = reference("api_id", Apis).primaryKey()
val key = varchar("key", 255)
val value = varchar("value", 255)
}
class ApiHeader(id: EntityID<Int>) : Entity<Int>(id) {
companion object : EntityClass<Int, ApiHeader>(ApiHeaders)
var api by Api referencedOn ApiHeaders.id
var key by ApiHeaders.key
var value by ApiHeaders.value
}
fun main() {
transaction {
addLogger(StdOutSqlLogger)
val api = Api.findById(1)
// if headers are not deleted, api can't be deleted directly
api?.headers?.forEach { it.delete() }
api?.delete()
commit()
}
}
Мне нужен способ легко установить желаемый каскадный тип отношений.