我的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
域中即可)。如果要生成两个表(
Domain
和User
),则设置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/