【发布时间】:2012-07-11 09:13:20
【问题描述】:
我已经在 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 中是否有将父类转换为子类的方法?
【问题讨论】:
-
没有discriminator 供gorm 在
User或Team之间选择。 gorm 应该如何决定使用哪个实现? -
它保存到数据库中的同一个表中,并带有一个类属性,该属性指示它是哪个类。
标签: grails inheritance groovy grails-orm