2

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

由于“抽象”关键字,我找不到有关以下映射语句是否被忽略的信息

abstract class Item implements Comparable{
  static mapping = {
    tablePerHierarchy true
  }
...

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

我是否需要使项目具体但在验证中不允许它?我计划在创建表单中使用 <select> 选择一个带有子类的 ItemController。

4

1 回答 1

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 关键字是不正确的。

所以我计划的层次结构是一些简单的数据类型,例如:抽象类型<-具体文本<-具体Url抽象类型<-抽象数字<-具体积分抽象类型<-抽象数字<-具体十进制

必须变为:具体类型 <- 具体文本 <- 具体 URL 具体类型 <- 具体数字 <- 具体整体具体类型 <- 具体数字 <- 具体十进制

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

为了披露,我仍在使用 Grails 1.1.2,直到我觉得 1.2 足够稳定。

于 2010-03-05T00:57:48.357 回答