对于抽象类,TablePerHierarchy总是为false?

时间:2010-02-17 12:26:54

标签: inheritance grails groovy gorm abstract

根据the Grails GORM guide,除非tablePerHierarchy设置为false,否则域类的子类与父类共享同一个表。

由于“abstract”关键字

,我无法找到有关以下映射语句是否被忽略的信息
abstract class Item implements Comparable{
  static mapping = {
    tablePerHierarchy true
  }
...

我的数据库不包含Item表,每个子类有一个表(tablePerHierarchy的预期状态== false)。

我是否需要使Item具体但在验证中不允许它?我打算让一个ItemController使用< select>选择子类。在创建形式。

1 个答案:

答案 0 :(得分:4)

我相信你已经解决了这个问题,但今天我遇到了同样的问题,所以我想我会插话。

在Grails / Gorm文档的5.2.3节中,它指出“GORM支持从抽象基类和具体的持久GORM实体继承” (http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).html)。

有趣的是,他们没有在本节的示例中提供抽象类的示例。

我尝试过,在我的层次结构中有一个抽象类(在层次结构的顶部,然后在其中一个分支下面)。每当我试图坚持一个抽象的子类的对象时,我就会失败。

我首先从层次结构的顶部删除了abstract关键字,然后我获得了更多积极的结果。最后,我从层次结构中的所有分支中删除了abstract关键字,一切正常。

所以,我的结论是,在实践中,你可以在Gorm层次结构中使用abstract关键字。

所以我计划的层次结构就是一些简单的数据类型,例如:   abstract Type< - 具体文字< - 具体网址   abstract Type< - abstract Numeric< - concrete Integral   abstract Type< - abstract Numeric< - 具体十进制

必须成为:   具体类型< - 具体文本< - 具体网址   concrete type< - concrete Numeric< - concrete Integral   具体类型< - 具体数字< - 具体十进制

即使我无意直接创建Type或Numeric的实例。

对于披露,我仍然使用Grails 1.1.2,直到我认为1.2足够稳定。