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

Grails 使用id获取继承的类,但不知道类类型,grails,gorm,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}"/> 从基中找出类,比如它的Sub2 获

我从一个基类继承了几个类。我的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}"/>
从基中找出类,比如它的Sub2

获取真实对象:

Sub2.get(id)
是否有类似于:


这是id,根据id通过一个查询获取完全派生的类。

我不确定是否正确理解了您的问题。执行
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")

我不确定我是否正确理解了你的问题。执行
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")