Jak zapewnić integralność danych podczas korzystania z tabeli podklasy?
Używamtabela na podklasę strategia w Grails poprzez ustawienietablePerHierarchy
właściwość statycznamapping
pole w mojej nadklasie na false. W ten sposób Grails tworzy jedną tabelę dla mojej superklasy i jedną dodatkową tabelę dla każdej z moich podklas.
Jednakże, podczas gdy rekordy nadklasy i podklasy mają ten sam identyfikator (klucz podstawowy), nie ma ograniczeń klucza obcego, aby zachować ich spójność, tj. Możliwe jest usunięcie rekordu nadklasy, pozostawiając rekord podklasy w nieprawidłowym stanie. Chcę wiedzieć, czy istnieje ustawienie / właściwość, aby GORM rozwiązał to w jakiś sposób, np. poprzez ograniczenia. Czy jest to moja jedyna opcja ręcznego dodawania kluczy obcych?
Na przykład, biorąc pod uwagę następującą klasę domeny jako nadklasę:
class Product {
String productCode
static mapping = {
tablePerHierarchy false
}
}
I następująca klasa domeny jako podklasa:
class Book extends Product {
String isbn
}
Powoduje to utworzenie dwóch tabelProduct
stół iBook
stół. Podczas tworzenia książki - na przykład na stronach z rusztowaniami - do każdej tabeli wstawiany jest rekord, a jedynym ich połączeniem jest fakt, że wartość identyfikatora jest taka sama dla każdego. W szczególności dane mogą wyglądać tak:
PRODUCT
Id Version ProductCode
1 1 BLAH-02X1
BOOK
Id ISBN
1 123-4-56-7891011-1
Ponieważ nie ma formalnego związku zdefiniowanego na poziomie bazy danych dla tych tabel, możliwe jest usunięcie jednego z rekordów i pozostawienie drugiego, co powoduje nieprawidłowe dane. Oczywiście mogę użyć SQL do ręcznego utworzenia ograniczenia klucza obcego na dwóch polach ID, ale miałem nadzieję, że Grails sobie z tym poradzi. czy to możliwe?
Używanie Grails 2.2.1