gpt4 book ai didi

grails - GORM使用基类名称代替具体的类名称创建表

转载 作者:行者123 更新时间:2023-12-02 15:18:39 26 4
gpt4 key购买 nike

我的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
}

但是,如果您从 user扩展了其他类,则命名表 Domain可能没有意义。
(如果您不打算从 Domain扩展其他类,则只需将字段添加到 User域中即可)。

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

这是一个很棒的文章,并附有示例,可以帮助您确定要采用哪种方式进行项目:

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

附带说明:我不热衷于域类的名称 Domain;它太通用,当您谈论特定的 Domain类与域类时可能会引起混淆。至少将其命名为 BaseDomain

关于grails - GORM使用基类名称代替具体的类名称创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44315701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com