我已使用继承在Grails中对我的域类建模,如下所示。
abstract class Profile{
}
class Team extends Profile{
}
class User extends Profile{
}
class B{
static hasMany = [profiles: Profile]
}
稍后在控制器中,当我在某些情况下从B类获取所有配置文件时,我想将一些配置文件转换为Team或User,但我不能,因为我得到了java.lang.ClassCastException或者GroovyCastException,尽管它们保存为Team或User(在数据库中具有属性类)。以下是我尝试过的方法:
def team1 = b.profiles.toList()[0] as Team
def team1 = (Team)b.profiles.toList()[0]
当我不写任何类型时它正在工作,因为它在动态语言中是正常的。
def team1 = b.profiles.toList()[0]
但后来我才知道我正在使用哪个班级。无论如何在groovy或gorm中将父类投射给孩子?
答案 0 :(得分:4)
答案是否,因为真正的GORM / Hibernate实例是代理对象。所以它不能直接转换为实体类。
无论如何,这可能会有所帮助:
def team1 = b.profiles.toList()[0]
if(team1.instanceOf(Team)) {
// I am an instance of Team
// do something here.
}