我的 gorm 包中有以下域:
Domain.groovy
package gorm
class Domain {
String createdBy
static constraints = {
}
static mapping = {
tablePerHierarchy true
}
}
User.groovy
package gorm
class User extends Domain {
String name
static constraints = {
}
}
我想要一个名为 user 的表,其中包含基类域的字段,但 GROM 生成了一个具有此规范的表
create table domain
(
id bigint auto_increment
primary key,
version bigint not null,
created_by varchar(255) not null,
class varchar(255) not null,
name varchar(255) null
)
我正在使用带有 grails 2.5.6 的 mysql 驱动程序。
它会生成名称为domain
的表,因为您在映射中使用了tablePerHierarchy true
。
基本上,您将获得一个表,您可以在其中为子类设置不同的鉴别器。
有关继承策略的更多信息,请参阅此处:http://docs.grails.org/2.5.x/guide/single.html#GORM (向下滚动到:7.2.3 GORM 中的继承)
如果您只是希望 schema-export 生成名称为user
的表,则需要将以下内容添加到Domain
类中的映射块中:
table 'user
'
因此,整个映射块将如下所示:
static mapping = {
table 'user'
tablePerHierarchy true
}
但是,如果您有其他类从Domain
扩展,则命名表可能没有意义user
。 (如果您不打算让其他类从Domain
扩展,那么只需将您的字段添加到您的User
域中)。
如果要生成两个表(Domain
和User
),则设置tablePerHierachy false
。
这里有一篇很棒的文章,其中包含一些示例,可以帮助您决定要为项目采取哪种方式:
https://sysgears.com/articles/advanced-gorm-features-inheritance-embedded-data-maps-and-lists-storing/
作为旁注:我不热衷于域类的名称Domain
;它太通用了,当您谈论特定的Domain
类与域类时可能会感到困惑。至少把它命名为BaseDomain
.