将域对象添加到gorm关系获取空指针异常

时间:2013-10-29 15:47:34

标签: grails gorm

这是我的域类定义:

class Profile {
           PhotoAlbum photoAlbum

           static constraints = {
               photoAlbum(nullable:true)
           }
}

class PhotoAlbum {

        static hasMany = [photos:Photo]
        static belongsTo = [profile:Profile]

}

class Photo {
       static belongsTo = PhotoAlbum
}

在控制器中,我将拥有一个实例化的配置文件域。该域以nullAlAlbum开头。如果我想添加第一张照片,我会在photoAlbum上得到一个空指针异常:

Photo photo = new Photo()

profile.photoAlbum.addToPhotos(photo)

执行此操作的grailsy方法是什么,并避免空指针异常:

Photo photo = new Photo()

if (!profile.photoAlbum) { profile.photoAlbum = new PhotoAlbum) }

profile.photoAlbum.addToPhotos(photo)

我原以为如果photoAlbum为null,当我尝试将第一个照片对象添加到它时,grails会创建一个新的。虽然上面的3行代码有效,但我想知道是否有更好的方法可以在2行代码中完成相同的操作。

1 个答案:

答案 0 :(得分:0)

您可以在PhotoAlbum中覆盖Profile的getter以按需创建相册:

class Profile {
    ...
    PhotoAlbum getPhotoAlbum() {
        if (photoAlbum == null) {
            photoAlbum = new PhotoAlbum()
        }
        photoAlbum
    }
}

然后当您致电profile.photoAlbum时,它会按照您的预期自动创建。但是,每当调用getter时,这将创建空白专辑,这可能不是您想要的。我会更清楚地说明这一点:

class Profile {
    ...
    PhotoAlbum createOrGetPhotoAlbum() {
        if (photoAlbum == null) {
            photoAlbum = new PhotoAlbum()
        }
        photoAlbum
    }
}

并像这样称呼:profile.createOrGetPhotoAlbum().addToPhotos(photo)