我有一些来自基类的继承类。我的gsp列出了子类,所以我知道列表中每个类的类型。
tablePerHierarchy为false,因此我有一个表包含所有继承的类。
abstract class Base {
}
public class Sub1 extends Base {
}
public class Sub2 extends Base {
}
的list.gsp:
<g:link action="show" id="${item.id}"/>
在我的控制器中,如果只知道行ID,我怎样才能获得正确的Sub1 / Sub2实例?
例如,这是我不想做的(2个查询):
Base.get(id)
从基数中找出这个类,比如它的Sub2
得到真实的对象:
Sub2.get(id)
是否有类似的东西:
这是id,根据带有一个查询的id获取完全派生类。
答案 0 :(得分:1)
我不确定我是否理解你的问题。执行Base.get(id)
时,GORM(带有Hibernate)会自动返回实例,在本例中为Sub1或Sub2。您无需再次致电Sub1.get(id)
。
如果要检查返回的实例是否为Sub1或Sub2,您可以执行以下操作:
def instance = Base.get(id)
if (instance.instanceOf(Sub1))
instance.doSub1Operation()
else if (instance.instanceOf(Sub2))
instance.doSub2Operation
else
throw new RuntimeException("Unknown instance type")