如何Grails的GORM将插入每个具体类表,其中每个具体的类继承一个抽象类(How Grails

2019-06-26 17:53发布

大家好下面的情况是我有一个抽象类AbstractProfile和一个具体的类GoogleProfile

abstract class AbstractProfile  {
    .....
}

class GoogleProfile extends AbstractProfile { 

    ......
}

我使用的Grails但格姆没有插入的谷歌个人资料目前格姆表只AbstractProfile类插入表请帮助在此先感谢

Answer 1:

我做了一些挖掘和发现,开始对Grails的2.3有以下映射选项:

tablePerConcreteClass true

看来文档(即使是版本2.4 )对此一直没有更新呢。



Answer 2:

您可以使用此:

abstract class BaseDomain {
            static mapping = {
                tablePerConcreteClass true
                id generator: 'increment'
                version false
            }
    }


Answer 3:

Grails的2.0仍然存在的抽象类。 为了使单个表的扩展类,你需要指定:

static mapping = {
        tablePerHierarchy       false
}

抽象类。 否则整个层次将在同一个表中“活”。



Answer 4:

在Михаил的伟大回答跟进,两个独立的东西为我工作。

  1. 把基本域类中的src

这个工作对我来说最好的,因为被应用无论从基类的约束和子类。 其在子类中NOT NULL列是我的使用情况很重要。 然而,似乎只有从子类的映射块被使用。

  1. 使用tablePerConcreteClass true

这里的优点是,它允许一个索引来在BaseDomain类然后出现在每个子类表,即用于从基类和子类都映射块中声明。 仅在基类的约束似乎被使用。

abstract class BaseDomain {
    static mapping = {
        tablePerHierarchy false  // avoid creating the base_domain table
        tablePerConcreteClass true
        id generator: 'increment' // https://jira.grails.org/browse/GRAILS-10849
        someColumnInBaseDomain index: true  // index this column in each subclass table
    }
}


文章来源: How Grails gorm will insert table per concrete class where each concrete class inherits an abstract class
标签: grails gorm