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

questionAnswers(2)

yourAnswerToTheQuestion