如果我创建这样的抽象域类:

abstract class DomainBase {

    LocalDateTime created = LocalDateTime.now()
    LocalDateTime updated

    static constraints = {
        created nullable: false
        updated nullable: true
    }

    static mapping = {
        tablePerConcreteClass true
        created column: 'CREATED'
        updated column: 'UPDATED'
    }

    def beforeUpdate() {
        this.updated = LocalDateTime.now()
    }
}

然后,我可以以此扩展其他域类,它们将继承所有内容(属性,约束,映射和拦截器),并且生成的数据库不包含具体的DOMAIN_BASE表。这样,一切都会按预期进行。

但是,如果我创建另一个扩展DomainBase的抽象类,例如:
abstract class EntityBase extends DomainBase {
    User createdBy
    Boolean active = true

    static constraints = {
        createdBy nullable: false
        active nullable: true
    }

    static mapping = {
        tablePerConcreteClass true
        createdBy column: 'CREATED_BY_ID'
        active column: 'ACTIVE'
    }
}

然后,生成的数据库将具有一个具体的ENTITY_BASE表。这就是问题所在。

我可以收集到的建议解决方案是使基类是普通的POGO而不是域对象,但是,该映射不会被继承,而且我懒得将映射复制粘贴到我创建的每个域类中。

另外,如果我尝试使这些域对象成为特征,由于编译过程中NPE破坏了该应用程序,我什至无法运行该应用程序。

有没有简单而优雅的方法来解决这个问题?

最佳答案

据我所知,您不能继承Grails 2.4.x中的映射,它认为2.5.0中的映射相同...

解决方法是,您可以使用和更改域类的脚手架模板。

关于hibernate - Grails 2.5.0二级抽象域类创建了自己的表,即使它不应该,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31049229/

10-11 17:43