GORM 使用基本 class 名称而不是具体 class 名称创建表
GORM creating tables with base class name instead concrete class name
我的 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 = {
}
}
我想要一个具有基本 class 域字段的 table 命名用户,但是 GROM 生成了一个 table 这个规范
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
的 table,因为您在映射中使用 tablePerHierarchy true
。
基本上,您会得到一个 table,您可以在其中为子 class 设置不同的鉴别器。
有关继承策略的更多信息,请参阅此处:http://docs.grails.org/2.5.x/guide/single.html#GORM
(向下滚动到:7.2.3 GORM 中的继承)
如果您只是希望 schema-export 生成名称为 user
的 table,那么您需要将以下内容添加到 Domain
中的映射块 class:
table 'user
'
所以整个映射块看起来像:
static mapping = {
table 'user'
tablePerHierarchy true
}
但是,如果您有其他 class 扩展自 Domain
,则将 table 命名为 user
可能没有意义。
(如果您不打算从 Domain
扩展其他 classes,那么只需将您的字段添加到您的 User
域中即可)。
如果要生成两个table(Domain
和User
),则设置tablePerHierachy false
.
这是一篇很棒的文章,其中包含示例,可以帮助您决定项目的方向:
附带说明:我不喜欢域名 class 的名称 Domain
;它过于笼统,当您谈论特定的 Domain
class 与域 class 时,可能会让人感到困惑。至少将其命名为 BaseDomain
。
我的 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 = {
}
}
我想要一个具有基本 class 域字段的 table 命名用户,但是 GROM 生成了一个 table 这个规范
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
的 table,因为您在映射中使用 tablePerHierarchy true
。
基本上,您会得到一个 table,您可以在其中为子 class 设置不同的鉴别器。
有关继承策略的更多信息,请参阅此处:http://docs.grails.org/2.5.x/guide/single.html#GORM (向下滚动到:7.2.3 GORM 中的继承)
如果您只是希望 schema-export 生成名称为 user
的 table,那么您需要将以下内容添加到 Domain
中的映射块 class:
table 'user
'
所以整个映射块看起来像:
static mapping = {
table 'user'
tablePerHierarchy true
}
但是,如果您有其他 class 扩展自 Domain
,则将 table 命名为 user
可能没有意义。
(如果您不打算从 Domain
扩展其他 classes,那么只需将您的字段添加到您的 User
域中即可)。
如果要生成两个table(Domain
和User
),则设置tablePerHierachy false
.
这是一篇很棒的文章,其中包含示例,可以帮助您决定项目的方向:
附带说明:我不喜欢域名 class 的名称 Domain
;它过于笼统,当您谈论特定的 Domain
class 与域 class 时,可能会让人感到困惑。至少将其命名为 BaseDomain
。