Grails GORM抽象域类

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 }

我有两个抽象的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
   }
}

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=?