在 Grails 中使用抽象(或非抽象)继承时,以下内容对我不起作用。
很快,我的继承如下:
abstract BaseClass { ... }
SomeClass extends BaseClass { ... }
SomeOtherClass extends BaseClass { ... }
然后在另一个域对象中:
ThirdClass {
...
BaseClass baseProperty
...
}
但是现在,当我尝试将该属性设置为 aSomeClass
或SomeOtherClass
实例时,Grails 会出现:
错误 util.JDBCExceptionReporter - 无法添加或更新子行:外键约束失败...
这不可能吗?
我也尝试过让基类不是抽象的,并尝试将SomeClass
orSomeOtherClass
实例转换为BaseClass
. 它们产生相同的错误。
更新
我刚检查过。它适用于我添加的第一个子类。但是,一旦我尝试添加另一个子类,它就会失败。
换句话说:
def prop1 = new ThirdClass(baseProperty: instanceOfSomeClass).save()
工作正常。但是当我尝试去做时:
def prop2 = new ThridClass(baseProperty: instanceOfSomeOtherClass).save()
它失败。
更新 2
进一步调查表明,在表创建过程中出现了问题。它正确地将两个外键添加到ThirdClass
表中,但键错误地引用:
CONSTRAINT `...` FOREIGN KEY (`some_id`) REFERENCES `base_class` (`id`),
CONSTRAINT `...` FOREIGN KEY (`some_id`) REFERENCES `some_class` (`id`)
不知道为什么选择基类和子类之一?我试过清洁等。