希望这将是一个容易回答的问题。我在Grails中创建了一个名为player的类,其中包含以下信息:
class Player {
String steamId
String name
String portrait
static hasMany = {playerStatistics:PlayerStatistics}
static hasOne = {playerForumProfile:PlayerForumProfile}
}
为了澄清,Player对象可以有一个PlayerForumProfile对象,但始终在 BEFORE PlayerForumProfile对象中创建播放器对象。我的问题是访问与PlayerForumProfile类的控制器中的“hasOne”属性关联的playerForumProfile对象。我曾经假设这样做:
def playerForumProfileInstance = new PlayerForumProfile()
def playerInstance = Player.get(params.id)
playerForumProfileInstance = playerInstance.playerForumProfile
会导致将与playerInstance对象关联的PlayerForumProfile对象拉入playerForumProfileInstance变量,但是当我尝试这个时,Grails会抛出一个错误,告诉我没有像playerForumProfile这样的属性。是否可以以这种方式访问hasOne属性的对象,还是需要做其他事情?
编辑:我也尝试修改Player类,因此它包含一个名为 playerForumProfile 的变量并编辑PlayerForumProfile,因此它有一个 belongsTo 声明,但这会导致null运行我的应用程序时指针异常。
编辑:更多信息,我从头开始创建了一个新的grails应用程序并创建了它在Grails文档中显示的方式,它运行没有问题所以我认为开始一个新的可能更容易应用并复制文件。
答案 0 :(得分:5)
答案 1 :(得分:3)
对于Grails 2.X及更高版本,这个答案已经不再正确了,2009年最初的答案确实如此。
GORM中没有“hasOne”属性,它要么属于:
static belongsTo = [playerForumProfile: PlayerForumProfile]
或者只是属性名称的常规类型定义,如果belongsTo没有隐含的级联关系:
PlayerForumProfile playerForumProfile
有关详细信息,请参阅one-to-one GORM documentation。