如果我创建这样的抽象域类:
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/