我有2个抽象的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)
这可以按预期工作
现在,当我尝试
时b.delete(flush:true)
由于在A / B之间创建的连接表中存在参照完整性违规,因此失败。看起来GORM作为删除的一部分的第一个查询是从B
表执行删除,而不是连接表,并且连接有一个通过其id引用回B
表的引用,这会导致违规行为。
delete from b where id=? and version=?
我希望将A
和B
保留在域文件夹中的原因是我可以执行A.list()
之类的操作,因此将其移至src/groovy
只会是最后一个选择。