希望这将是一个容易回答的问题。我在Grails中创建了一个名为player的类,该类具有以下信息:
class Player {
String steamId
String name
String portrait
static hasMany = {playerStatistics:PlayerStatistics}
static hasOne = {playerForumProfile:PlayerForumProfile}
}
为了澄清起见,一个Player对象可以有一个PlayerForumProfile对象,但总是在player之前创建 。我的问题是访问与PlayerForumProfile类的 Controller 内的“hasOne”属性关联的playerForumProfile对象。我以为是这样做的:
def playerForumProfileInstance = new PlayerForumProfile()
def playerInstance = Player.get(params.id)
playerForumProfileInstance = playerInstance.playerForumProfile
会导致将与playerInstance对象关联的PlayerForumProfile对象拉入playerForumProfileInstance变量,但是当我尝试执行此操作时,Grails会抛出一个错误,告诉我没有诸如playerForumProfile这样的属性。是否可以通过这种方式访问hasOne属性的对象,还是我需要做其他事情?
编辑:我还尝试修改Player类,以便它包含一个名为 playerForumProfile 的变量,并编辑PlayerForumProfile,以便它具有一个 includesTo到声明,但这在运行我的应用程序时始终导致空指针异常。
编辑:更多信息,我从头开始创建了一个新的grails应用程序,并按照Grails文档中的显示方式创建了关系,并且该关系没有问题,因此我认为仅启动一个新应用程序并进行复制可能会更容易文件结束。
最佳答案
对于grails 2.X及更高版本,此答案不再正确,2009年最初回答时确实如此。
GORM中没有“hasOne”属性,它要么是belongsTo:
static belongsTo = [playerForumProfile: PlayerForumProfile]
或仅是属性名称的常规类型定义(如果不存在belongsTo暗示的级联关系):
PlayerForumProfile playerForumProfile
有关详细信息,请参见one-to-one GORM documentation。