GORM 使用基类名而不是具体的类名创建表



我的 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域中)。

如果要生成两个表(DomainUser),则设置tablePerHierachy false

这里有一篇很棒的文章,其中包含一些示例,可以帮助您决定要为项目采取哪种方式:

https://sysgears.com/articles/advanced-gorm-features-inheritance-embedded-data-maps-and-lists-storing/

作为旁注:我不热衷于域类的名称Domain;它太通用了,当您谈论特定的Domain类与域类时可能会感到困惑。至少把它命名为BaseDomain.

相关内容

  • 没有找到相关文章

最新更新