6

我在 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,虽然它们被保存为团队或用户(具有数据库中的属性类)。以下是我尝试过的方法:

def team1 = b.profiles.toList()[0] as Team

def team1 = (Team)b.profiles.toList()[0]

当我不编写任何类型时它正在工作,只是使用它,因为它在动态语言中是正常的。

def team1 = b.profiles.toList()[0]

但后来我永远不知道我正在使用哪个类。在 groovy 或 gorm 中是否有将父类转换为子类的方法?

4

1 回答 1

6

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

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

def team1 = b.profiles.toList()[0]
if(team1.instanceOf(Team)) {
    // I am an instance of Team
    // do something here.
}
于 2012-07-11T10:57:15.590 回答