1

希望这将是一个容易回答的问题。我在 Grails 中创建了一个名为 player 的类,其中包含以下信息:

class Player {
 String steamId
 String name
 String portrait
 static hasMany = {playerStatistics:PlayerStatistics}
 static hasOne = {playerForumProfile:PlayerForumProfile}
}

为澄清起见,一个 Player 对象可以有一个 PlayerForumProfile 对象,但玩家对象总是在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声明,但这在运行我的应用程序时一直导致空指针异常。

编辑:更多信息,我从头开始创建了一个新的 grails 应用程序,并按照它在 Grails 文档中的显示方式创建了关系,它运行没有问题,所以我认为启动一个新应用程序并复制可能更容易文件结束。

4

2 回答 2

5

GORM 中有 hasOne 功能:http: //grails.org/doc/latest/ref/Domain%20Classes/hasOne.html

于 2010-08-02T07:37:45.980 回答
3

对于 grails 2.X 及更高版本,此答案不再正确,在 2009 年最初回答时确实如此。

GORM 中没有“hasOne”属性,它要么是 belongsTo:

static belongsTo = [playerForumProfile: PlayerForumProfile]

或者如果没有由 belongsTo 暗示的级联关系,则只是属性名称的常规类型定义:

PlayerForumProfile playerForumProfile

有关详细信息,请参阅一对一的 GORM 文档

于 2009-07-22T06:00:12.980 回答