使用GORM DSL将多个域对象映射到同一个表

时间:2010-03-04 12:56:31

标签: orm grails groovy gorm

我正在遗留数据库上创建一个grails应用程序 有一个表格,我想创建几个不同的域对象(在我的例子中,Type1,Type2和Type3)。
表格如下:

ID    TYPE    DESCRIPTION
1     type1   description of a type1 object
2     type1   description of another type1 object
3     type2   description of a type2 object
4     type3   description of a type3 object
...

所以我想创建3个不同的域类,每个类包含一个名为“description”的字段,并且对应于特定的“类型”,因为行代表不同的概念。

是否有任何类型的约束允许我按类型过滤行?

我的意思是,我可以这样做:

class Type1 {
    String type
    String description

    static mapping = {
       table 'mytable'
    }

    static constraints = { type == 'type1' } // Is there anything like this ?

 }

然后我希望Type1.list()生成如下的查询:

SELECT type, description 
FROM mytable
WHERE type = 'type1'

更新:

实际上documentation说我可以使用鉴别器来实现这一点。

但是,我尝试按如下方式设置我的课程:

class Type1 extends BaseType {

  static mapping = {
    discriminator column:'type', value: 'type1'
  }

}

我激活了hibernate SQL跟踪,而不是看到

SELECT ... FROM mytable WHERE type = 'type1'

我看到了

SELECT ... FROM mytable WHERE class = 'type1'

似乎鉴别器完全忽略了我的自定义列名:-(

我正在使用Grails 1.2.1

2 个答案:

答案 0 :(得分:5)

好的,所以Grails文档不是最新的(it should though)。

解决方案是:

在BaseType类中:

static mapping = { discriminator column:"type" }

在子类中:

static mapping = { discriminator value:"type1" } // or type2, type3, etc...

答案 1 :(得分:0)

The GORM Documentation似乎建议你可以,只要所有的TypeX类扩展一个公共基类