2

圣杯 2.2.1

我的简单域:

class Article{
    SortedSet<Photo> photoGallery

    //helper method
    Photo getMainPhoto(){
        Photo mainPhoto = photoGallery.find{it.mainPhoto}
        return mainPhoto
    }
}

一对多相册懒人取

getMainPhoto从 .gsp 视图调用该方法。问题是有时(并非总是)LazyInitializationException在尝试从懒惰的一对多照片库中获取主照片时出错。

为什么偶尔会发生这种情况,而不是每次我调用该方法时?这正常吗?我怎样才能解决这个问题,而不是急切地获取这种关系?

谢谢

4

2 回答 2

0

您提供的代码是您定义域类的方式Article吗?你甚至可以使用类似的东西SortedSet吗?如果您希望 Grails 正确处理所有事情,我认为您需要hasMany在所有一对多情况下使用。

另一件事可能会有所帮助:查看是否Article有自动生成的辅助方法,例如getPhotoGallery. 也就是说,不要只指photoGallery直接。

如果这有任何帮助,请告诉我们。我自己也很困惑。

于 2013-10-10T22:05:32.320 回答
0

不确定,但我曾经遇到同样的错误,当我试图访问一个在未来有嵌套对象的对象时,所以有时在并发执行中由于懒惰,所有嵌套的域对象之前都没有被获取使用它们。

可以通过在视图上使用块之前访问块上的相同属性来避免问题。

因此,如果您在该行下方添加打印语句或其他内容

Photo mainPhoto = photoGallery.find{it.mainPhoto}

那么它应该被加载。

我不确定,但我想如果你这样添加它:

Photo mainPhoto = photoGallery.find{it.mainPhoto}
println("mainPhoto=${mainPhoto}")

那么它应该呈现在 GSP 页面上。

于 2013-06-06T12:59:01.110 回答