Grails GORM抽象域类
我有两个抽象的Grails域类Grails GORM抽象域类,grails,inheritance,gorm,Grails,Inheritance,Gorm,我有两个抽象的Grails域类 abstract class A { static hasMany = [ b : B ] static mapping = { tablePerHierarchy false } } class AChild extends A { } abstract class B { static belongsTo = A static mapping = { tablePerHierarchy false }
abstract class A {
static hasMany = [ b : B ]
static mapping = {
tablePerHierarchy false
}
}
class AChild extends A {
}
abstract class B {
static belongsTo = A
static mapping = {
tablePerHierarchy false
}
}
class BChild extends B {
}
我有一些代码
A a = new AChild()
a.b << new BChild()
a.save(flush:true)
由于在A/B之间创建的联接表中存在引用完整性冲突,此操作失败。看起来GORM作为删除的一部分进行的第一次查询是从B
表而不是联接表中进行删除,并且联接通过其id引用回B
表,这导致了冲突
delete from b where id=? and version=?
我希望将
A
和B
保留在域文件夹中的原因是,我可以执行A.list()
之类的操作,因此将其移出src/groovy
将是最后一个选项。我认为这是gorm中抽象类的一个bug。我打开了一个问题很好的问题,如果A不是抽象的,b.delete()会成功吗?我还没有尝试过抽象/非抽象的所有组合,以查看什么是有效的。但我的代码中还有其他关系可以正常工作,所以我假设这是一个抽象的问题。无论如何,我已经向grails团队报告了。
delete from b where id=? and version=?