GORM抽象域类

时间:2015-04-01 18:56:34

标签: grails inheritance gorm

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

我希望将AB保留在域文件夹中的原因是我可以执行A.list()之类的操作,因此将其移至src/groovy只会是最后一个选择。

1 个答案:

答案 0 :(得分:0)

我认为这是一个带抽象类的gorm中的错误。我已经打开了一个问题https://github.com/grails/grails-core/issues/593