Grails / Groovy域类继承强制转换

时间:2012-07-11 09:13:21

标签: grails inheritance groovy gorm

我已使用继承在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中将父类投射给孩子?

1 个答案:

答案 0 :(得分:4)

答案是,因为真正的GORM / Hibernate实例是代理对象。所以它不能直接转换为实体类。

无论如何,这可能会有所帮助:

def team1 = b.profiles.toList()[0]
if(team1.instanceOf(Team)) {
    // I am an instance of Team
    // do something here.
}