使用id获取继承的类,而不知道类的类型

时间:2013-11-15 15:42:51

标签: grails gorm

我有一些来自基类的继承类。我的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获取完全派生类。

1 个答案:

答案 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")