2017-06-01 24 views
0

我有我的包格姆以下域表: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生成一個表格whit這個規格

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 
) 

我使用mysql驅動程序與grails 2.5.6。

回答

1

它生成名稱爲domain的表格,因爲您在映射中使用tablePerHierarchy true

基本上,你會得到一個表,你可以爲子類設置不同的鑑別器。

這裏看到更多的信息,繼承策略:http://docs.grails.org/2.5.x/guide/single.html#GORM (向下滾動到:在GORM 7.2.3繼承)

如果你只是想用模式出口的名稱爲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

+0

不錯,我會在這種情況下生成兩個表,謝謝。 –