Grails で抽象 (または非抽象) 継承を使用している場合、以下は機能しません。
非常に迅速に、私の継承は次のとおりです。
abstract BaseClass { ... }
SomeClass extends BaseClass { ... }
SomeOtherClass extends BaseClass { ... }
そして、別のドメイン オブジェクトで:
ThirdClass {
...
BaseClass baseProperty
...
}
しかし今、そのプロパティを aSomeClass
またはSomeOtherClass
instance に設定しようとすると、Grails は次のように言います。
エラー util.JDBCExceptionReporter - 子行を追加または更新できません: 外部キー制約が失敗しました ...
これは不可能ですか?
SomeClass
また、基本クラスを抽象化しないようにして、またはSomeOtherClass
インスタンスを にキャストしようとしましたBaseClass
。それらは同じエラーを生成します。
アップデート
私はちょうどチェックしました。追加する最初のサブクラスで機能します。しかし、他のサブクラスを追加しようとするとすぐに失敗します。
言い換えると:
def prop1 = new ThirdClass(baseProperty: instanceOfSomeClass).save()
正常に動作します。しかし、私が試してみると:
def prop2 = new ThridClass(baseProperty: instanceOfSomeOtherClass).save()
それは失敗します。
更新 2
さらに調査すると、テーブルの作成プロセス中に問題が発生することがわかります。テーブルに 2 つの外部キーが正しく追加されますThirdClass
が、キーは正しく参照されません。
CONSTRAINT `...` FOREIGN KEY (`some_id`) REFERENCES `base_class` (`id`),
CONSTRAINT `...` FOREIGN KEY (`some_id`) REFERENCES `some_class` (`id`)
基本クラスとサブクラスの 1 つを選択する理由がわかりませんか? クリーニング等をしてみました。