Простое приложение для блога, Grails 1.3.9 и MySQL, отношения «многие ко многим» между двумя доменными классами, BlogPost и Tag.
class BlogPost {
String title
String teaser
String body
Date updated
Category category
Integer priority
static hasMany = [comments:Comment,tags:Tag]
static belongsTo = [Category,Tag]
static searchable = true
String toString() {
"$title"
}
static constraints = {
title(nullable:false,blank:false,lenght:1..50)
teaser(nullable:false,blank:false,lenght:1..100)
body(nullable:false,blank:false,maxSize:5000)
updated(nullable:false)
category(nullable:false)
priority(nullable:false)
}
}
class Tag {
String name
String description
static hasMany = [blogpost:BlogPost]
static searchable = true
String toString() {
"$name"
}
static constraints = {
name(nullable:false,blank:false)
description(nullable:false,blank:false)
}
}
Hibernate создает в MySQL три связанные таблицы: blog_post, tag и tag_blogpost.
Теперь, если я создам тег X, связанный с сообщением в блоге Y, а затем удалю Y, потерянная строка останется в таблице tag_blogpost, а представление показа для тега X выдаст исключение и «Нет строки с данным идентификатором:[...] "
Как я могу автоматически удалить (каскадно) потерянную строку в таблице tag_blogpost?