Hibernate 使用Grails(GORM)在继承模型中获取特定实体
我们需要构建几个相似的实体,它们之间的差异很小,我们决定使用GORM中可用的继承。 我们的域类如下所示:Hibernate 使用Grails(GORM)在继承模型中获取特定实体,hibernate,inheritance,grails,gorm,Hibernate,Inheritance,Grails,Gorm,我们需要构建几个相似的实体,它们之间的差异很小,我们决定使用GORM中可用的继承。 我们的域类如下所示: class Idea extends AuditableEntity { Project project User user String content static mapping = { content type: 'text' autoTimestamp true } static constr
class Idea extends AuditableEntity {
Project project
User user
String content
static mapping = {
content type: 'text'
autoTimestamp true
}
static constraints = {
content nullable: false, blank: false
}
}
其中一个孩子:
class FpIdea extends Idea {
FortyPrinciplesApplication fpApplication
Principle principle
static mapping = {
importFrom Idea
discriminator 'fp_idea'
table 'fp_idea'
}
static constraints = {
importFrom Idea
fpApplication nullable: false
principle nullable: false
}
}
现在,一切都按预期工作,如果我们知道对象类型应该是什么,我们就可以轻松地提取正确的对象类型。
然而,有没有一种方法可以简单地通过id(不知道类型之前的类型)获得idea对象,并且仍然以正确的类型获得它
如果我们通过
Idea
发出请求,那么我们将得到一个Idea
对象,该对象具有expandoMetaclass
。不确定这是否有帮助。显然,它已经开箱即用了。
所以,如果我尝试得到这样一个对象:
Idea.findByIdAndProjectAndUser(id, project, user)
它提供了正确的对象类型。但是,这些信息具有误导性
Idea.get(1L).class == FpIdea
static mapping = {
tablePerHierarchy false
}