Как обеспечить целостность данных при использовании таблиц на подкласс?
Я используютаблица на подкласс стратегия в Grails, установивtablePerHierarchy
свойство статикиmapping
поле в моем суперклассе ложно. Таким образом, Grails создает одну таблицу для моего суперкласса и одну дополнительную таблицу для каждого из моих подклассов.
Однако, хотя записи суперкласса и подкласса имеют один и тот же идентификатор (первичный ключ), нет ограничений внешнего ключа, чтобы поддерживать их согласованность, т. Е. Запись суперкласса можно удалить, оставив запись подкласса в недопустимом состоянии. Я хочу знать, есть ли параметр / свойство, чтобы GORM решал эту проблему каким-либо образом, например через ограничения. Или я могу добавить внешние ключи вручную?
Например, в качестве суперкласса указан следующий класс домена:
class Product {
String productCode
static mapping = {
tablePerHierarchy false
}
}
И следующий класс домена в качестве подкласса:
class Book extends Product {
String isbn
}
Это приводит к созданию двух таблиц,Product
стол иBook
Таблица. При создании книги - например, через скаффолдинговые страницы - в каждую таблицу вставляется запись, единственной ссылкой которой является тот факт, что значение идентификатора одинаково для каждой. В частности, данные могут выглядеть так:
PRODUCT
Id Version ProductCode
1 1 BLAH-02X1
BOOK
Id ISBN
1 123-4-56-7891011-1
Поскольку для этих таблиц не определено формальное отношение на уровне базы данных, можно удалить одну из записей и оставить другую, что приведет к неверным данным. Очевидно, что я могу использовать SQL, чтобы вручную создать ограничение внешнего ключа для двух полей ID, но я надеялся, что Grails справится с этим. Это возможно?
Использование Grails 2.2.1