【发布时间】:2013-10-29 15:47:33
【问题描述】:
这是我的域类定义:
class Profile {
PhotoAlbum photoAlbum
static constraints = {
photoAlbum(nullable:true)
}
}
class PhotoAlbum {
static hasMany = [photos:Photo]
static belongsTo = [profile:Profile]
}
class Photo {
static belongsTo = PhotoAlbum
}
在控制器中,我将拥有一个实例化的配置文件域。该域以空 photoAlbum 开始。如果我想添加第一张照片,我会在 photoAlbum 上得到一个空指针异常:
Photo photo = new Photo()
profile.photoAlbum.addToPhotos(photo)
有什么方法可以避免空指针异常:
Photo photo = new Photo()
if (!profile.photoAlbum) { profile.photoAlbum = new PhotoAlbum) }
profile.photoAlbum.addToPhotos(photo)
我原以为如果 photoAlbum 为空,当我尝试向其添加第一个照片对象时,grails 只会创建一个新对象。虽然上面的 3 行代码可以工作,但我想知道是否有更好的方法可以在 2 行代码中完成同样的事情。
【问题讨论】:
-
你正在做它可以做到的,恕我直言。任何以 null 开头的不是托管集合 (hasMany) 的属性都将为 null,直到您将其设为非 null。 Grails/Groovy 不能仅仅因为你的代码试图在一个空对象上设置一个属性,你就打算让它为你实例化它。
标签: grails grails-orm