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

标签 grails groovy 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
}

但是,如果您从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/

相关文章:

git - Grails警告:没有安装SCM提供程序Stash GIT存储库

Grails 3.x 升级插件

database - Grails动态数据库连接?

grails - Grails GORM会遍历所有hasMany元素,并且通常会遍历所有域类元素,而不会在列表中全部读取它们

grails - 简单的 Grails 应用程序超出了 Heroku 内存配额

session - 单击注销后如何从所有事件 session 中注销?

gradle - 如何使用不同的参数多次运行 Spock 规范?

java - SoapUI:重新验证(记录的)请求/响应对

grails - Grails GORM默认排序字段,它也是组合键的字段

grails - 具有hasMany的Grails类