【问题标题】:LazyInitializationException in GrailsGrails 中的 LazyInitializationException
【发布时间】:2013-06-05 07:30:53
【问题描述】:

Grails 2.2.1

我的简单域:

class Article{
    SortedSet<Photo> photoGallery

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

一对多的相册是懒加载的

我从 .gsp 视图调用 getMainPhoto 方法。 问题是,有时(并非总是)我在尝试从惰性一对多照片库中获取主照片时收到 LazyInitializationException 错误。

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

谢谢

【问题讨论】:

    标签: hibernate grails grails-orm lazy-evaluation eager


    【解决方案1】:

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

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

    所以如果你在该行下方添加打印语句或其他内容

    Photo mainPhoto = photoGallery.find{it.mainPhoto}
    

    然后它应该被加载。

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

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

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

    【讨论】:

      【解决方案2】:

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

      另一件可能有帮助的事情:看看Article 是否有一个自动生成的辅助方法,比如getPhotoGallery。也就是说,不要直接引用photoGallery

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-13
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多